在允许某些类型的HTML标记的同时,是否有一个catchall函数可以很好地清除SQL注入和XSS攻击的用户输入
用户输入可以被过滤是一种常见的误解。PHP甚至有一个(现在已弃用)的;“功能”;,这被称为神奇的引语,建立在这个想法之上。这是胡说八道。忘记过滤(或清洁,或其他人们称之为过滤的东西)
为了避免出现问题,您应该做的很简单:每当您在外部代码中嵌入一段数据时,您必须根据该代码的格式规则来处理它。但您必须了解,这些规则可能太复杂,无法手动执行。例如,在SQL中,字符串、数字和标识符的规则都是不同的。为了您的方便,在大多数情况下,有一个专用的工具用于这种嵌入。例如,当您需要在SQL查询中使用PHP变量时,您必须使用一个准备好的语句,该语句将负责所有正确的格式/处理
另一个例子是HTML:如果在HTML标记中嵌入字符串,则必须使用htmlspecialchars对其进行转义。这意味着每个echo或print语句都应该使用htmlspecialchars
第三个示例可能是shell命令:如果要将字符串(例如参数)嵌入到外部命令中,并使用exec调用它们,则必须使用escapeshellcmd和escapeshellarg
另外,一个非常引人注目的例子是JSON。规则是如此之多和复杂,你永远无法手动遵守它们。这就是为什么您永远不应该手动创建JSON字符串,而应该始终使用一个专用函数,JSON\u encode(),该函数将正确格式化每一位数据
诸如此类
只有在接受预格式化输入的情况下,才需要主动过滤数据。例如,如果您允许用户发布您计划在网站上显示的HTML标记。然而,您应该明智地不惜一切代价避免这种情况,因为无论您如何过滤它,它始终是一个潜在的安全漏洞