在xss代码上的preg_replace

时间:2010-05-31 14:50:43

标签: php xss

此代码是否有助于以用户提交表单清理恶意代码?

function rex($string) {
$patterns = array();
$patterns[0] = '/=/i';
$patterns[1] = '/javascript:/i';
$replacements = array();
$replacements[0] = '';
$replacements[1] = '';
return preg_replace($patterns, $replacements, $string);

我已经在客户端包含了htmlentities()以防止XSS,显示的所有代码是否足够安全以防止攻击?

5 个答案:

答案 0 :(得分:2)

如果您使用htmlentities,则不需要。要阻止XSS,您甚至可以使用htmlspecialchars

请确保对HTML响应中以纯文本格式打印的所有数据使用htmlspecialchars

另请参阅:“Does this set of regular expressions FULLY protect against cross site scripting?”的答案

答案 1 :(得分:2)

您的替换可能有所帮助。但是最好使用像PHP data filters这样的预卷解决方案。然后,您可以轻松地将数据类型限制为您期望的值。

答案 2 :(得分:0)

只有htmlentities才能解决问题。无需替换任何东西。

答案 3 :(得分:0)

答案 4 :(得分:0)

您的第一个替换规则是无用的,因为它可以通过使用eval和字符编码轻松规避(并且无论如何XSS攻击都不需要等号)。

使用javascript :java\script:等内容,至少可以在某些浏览器上规避您​​的第二条规则。

简而言之,它没有多大帮助。如果你想显示纯文本,htmlentities可能没问题(有一些奇特的攻击利用不寻常的字符编码和浏览器愚蠢来启动XSS攻击而没有任何特殊字符,但这只适用于特定的浏览器 - cough IE cough - 在特定情况下)。如果要将用户输入放在URL或其他属性中,则不一定足够。