【发布时间】:2010-10-29 20:29:10
【问题描述】:
为什么很多人在字符串上同时使用这两个函数?
我看到很多stripslashes(strip_tags($field));(或其他方式)
strip_tags 还不足以过滤任何 xss 之类的东西吗?
【问题讨论】:
为什么很多人在字符串上同时使用这两个函数?
我看到很多stripslashes(strip_tags($field));(或其他方式)
strip_tags 还不足以过滤任何 xss 之类的东西吗?
【问题讨论】:
转义数据与strip_tags 或stripslashes 无关。这些函数从字符串中过滤某些字符,而“转义”对某些字符进行编码,因此它们不会被浏览器或数据库解释。
您可以使用strip_tags 删除从浏览器发送到 PHP 的字符串中的 HTML 标记。更好的是,如果您在将数据发送回浏览器时使用htmlspecialchars 转义任何可能分隔标签的字符,您还可以安全地存储相同的数据而无需通过strip_tags。
stripslashes 从字符串中删除斜线,如果启用了“魔术引号”,您只需要担心它。这是早期的遗留问题,当时 PHP 开发人员天真地假设来自浏览器的每条数据都注定要用于数据库,并且不能信任开发人员自己逃离数据库。
【讨论】:
strip_tags 还不足以过滤任何 xss 之类的东西吗?
不。过滤 XSS 内容的唯一安全方法是 htmlspecialchars(),尽管我看到很多建议另外使用 strip_tags()。
参见例如本题讨论:Is preventing XSS and SQL Injection as easy as does this…
stripslashes 在这种情况下应该做什么,我不知道。这可能是为了撤消现已弃用的 magic quotes 函数的影响 - 但如果不先检查该特定函数是否已启用,则绝不应应用此方法。
【讨论】:
启用魔术引号时,它会自动转义所有 POST、GET 等变量中的引号。 stripslashes 在您使用数据之前删除那些。剥离标签 尝试 以删除所有 html 标签。
【讨论】:
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>
执行 XSS 攻击并不总是需要 HTML 标签。这可能是一种不太有效的攻击,但它仍然是一个潜在的攻击媒介。
【讨论】:
我注意到 strip_tags() 在引号字符中添加了反斜杠。我检查过了,magic_quotes_gpc 没有打开。 OP 最初的问题是为什么一些编码人员用 stripslashes() 包围 strip_tags() ,这就是我这样做的原因,因为我不希望数据库存储双反斜杠,因为无论如何我在将数据保存到数据库之前已经准备好数据。
【讨论】: