此代码是否有助于以用户提交表单清理恶意代码?
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,显示的所有代码是否足够安全以防止攻击?
答案 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或其他属性中,则不一定足够。