2010-05-31 78 views
2

此代码可以帮助消毒用户提交表单中的恶意代码吗?preg_replace on 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在客户端,显示的所有代码是否足够安全以防止攻击?

+1

你能提供更多的信息吗?什么是数据将用于?它将在哪里显示?你是否也在使用htmlentities,或者你是否期望这是一个替代品? – 2010-05-31 15:02:07

+0

upvoted,似乎是合理的问题和话题,谁downvoted而不留下评论是一个白痴。 – dmp 2010-05-31 15:03:10

+0

@danp,我同意。 +1,因为在XSS上有问题是很好的,即使它们是重复的。 – 2010-05-31 15:08:39

回答

0

htmlentities一个人会做的。根本不需要替换任何东西。

2

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

+0

谢谢,它非常有用! – proyb2 2010-05-31 16:10:44

-1
+1

这简短的回答是没有解释的http://ha.ckers.org/xss.html页面存在说服做一个完全安全的过滤方案,以防止XSS难度的开发非常有帮助。 – 2010-05-31 15:18:42

+0

链接不是答案,只是为什么“否”是问题的答案的一个例子:“此代码是否有助于在用户提交表单中清理恶意代码?” – Arkh 2012-11-19 09:59:19

0

你的第一替换规则是无用的,因为它可以通过使用eval和字符编码(和一个等号是没有必要的跨站脚本攻击反正)可以容易地规避。

通过使用诸如javascript :java\script:之类的东西,至少在某些浏览器上很可能绕过您的第二条规则。

总之,它没有多大帮助。如果你想显示纯文本,ヶ辆可能是罚款(有它走寻常字符编码和浏览器愚蠢的优势,发动XSS攻击,没有任何特殊字符的特殊攻击,但只适用于特定的浏览器 - 咳嗽 IE 咳嗽 - 在特定情况下)。如果你想把用户输入的URL或其他属性,它不一定就够了。