为什么很多人在字符串上使用这两个函数?
我看到很多stripslashes(strip_tags($field));
(或其他方式)
strip_tags
是否足以过滤任何xss内容等等?
答案 0 :(得分:10)
转义数据与strip_tags
或stripslashes
无关。这些函数从字符串中过滤掉某些字符,而“转义”则对某些字符进行编码,因此它们不会被浏览器或数据库解释。
您可以使用strip_tags
删除从浏览器发送到PHP的字符串中的HTML标记。更好的是,如果您使用strip_tags
来转义任何可能在您将数据发送回浏览器时分隔标记的字符,您还可以安全地存储相同的数据而不通过htmlspecialchars
。
stripslashes
从字符串中删除斜杠,如果启用了“魔术引号”,您只需要担心它。从早期的时候开始,当PHP开发人员天真地认为来自浏览器的每一段数据都是为数据库而且开发人员不能信任它们自己逃脱数据库时。
答案 1 :(得分:5)
strip_tags不足以过滤任何xss的东西吗?
不。过滤掉XSS内容的唯一安全方法是htmlspecialchars()
,但我看到许多建议另外使用strip_tags()
。
参见例如这个问题的讨论:Is preventing XSS and SQL Injection as easy as does this…
在这种情况下stripslashes
应该做什么,我不知道。这可能是试图撤消现已弃用的magic quotes函数的效果 - 但是如果不首先检查该特定函数是否已启用,则不应该应用此函数。
答案 2 :(得分:2)
当魔术引号打开时,它将自动转义所有POST,GET等变量中的引号。 stripslashes在您使用数据之前删除它们。剥离标记尝试删除所有html标记。
答案 3 :(得分:1)
strip_tags()
通常不足以防止XSS攻击,所以最好小心谨慎。
请考虑以下事项:
$str = "' onclick='javascript:alert(0);' alt='";
echo "<a href='". strip_tags($str) ."'></a>";
// output is <a href='' onclick='javascript:alert(0);' alt=''></a>
并不总是需要HTML标记来执行XSS攻击。它可能是一种不太有效的攻击,但它仍然是潜在的攻击载体。
答案 4 :(得分:1)
我注意到strip_tags()会在引用字符时添加反斜杠。我已经检查过并且没有打开magic_quotes_gpc。 OP的原始问题是为什么有些编码器用stripslashes()包围strip_tags(),这就是为什么我这样做,因为我不希望数据库存储双反斜杠,因为我已经准备好了我的数据,然后再保存到数据库。