是否有一个catchall函数适用于清理SQL注入和XSS攻击的用户输入,同时仍允许某些类型的html标记?
发布于 2018-08-31 09:46:19
这是一种常见的误解,即用户输入可以被过滤。PHP甚至有一个(现已弃用的)“功能”,称为魔术引号,它建立在这个想法的基础之上。这是无稽之谈。忘记过滤(或清洁,或任何人称之为)。
为了避免出现问题,你应该做的很简单:每当你在国外代码中嵌入一个字符串时,你必须根据该语言的规则来逃避它。例如,如果在某些SQL目标MySql中嵌入一个字符串,则必须为此目的使用MySql函数转义该字符串(mysqli_real_escape_string
)。(或者,对于数据库,如果可能,使用预准备语句是更好的方法)
另一个例子是HTML:如果在HTML标记中嵌入字符串,则必须使用它进行转义htmlspecialchars
。这意味着每个单词echo
或print
语句都应该使用htmlspecialchars
。
第三个例子可能是shell命令:如果你要将字符串(例如参数)嵌入到外部命令中,并用它们调用它们exec
,那么你必须使用escapeshellcmd
和escapeshellarg
。
等等等等 ...
您需要主动过滤数据的唯一情况是,您是否接受预先格式化的输入。例如。如果您允许用户发布HTML标记,那么您计划在网站上显示。但是,你应该不惜一切代价避免这种情况,因为无论你如何过滤它,它都将是一个潜在的安全漏洞。
发布于 2018-08-31 10:49:39
不可以。如果没有任何上下文,您无法对数据进行一般过滤。有时您希望将SQL查询作为输入,有时您希望将HTML作为输入。
您需要过滤白名单上的输入 - 确保数据符合您期望的某些规范。然后,您需要在使用它之前将其转义,具体取决于您使用它的上下文。
转义SQL数据的过程 - 防止SQL注入 - 与转换(X)HTML数据的过程非常不同,以防止XSS。
https://stackoverflow.com/questions/-100000703
复制相似问题