避免XSS漏洞 - 白名单?

时间:2009-09-18 04:03:54

标签: c# xss security

防止XSS漏洞的最佳做法是什么?

这里的很多人都提到了白名单,这听起来不错,但我看到很多人使用RegEx来定义白名单。这看起来本身存在缺陷,因为它取决于许多因素,其中最重要的是RegEx实现以及编写表达式的人不会犯错的技巧。因此,许多XSS攻击都成功,因为它们使用techniques to make the regex accept them

什么是最好的(虽然可能比正则表达式白名单更加劳动密集)避免这些漏洞/消毒用户输入的方法?理论上甚至可以完全消毒用户输入吗?

3 个答案:

答案 0 :(得分:4)

查看AntiXSS库。

答案 1 :(得分:2)

迈克尔的回答是可以的,但它会阻止安全的HTML以及危险的输入。这意味着任何包含HTML格式的输入,例如< em>将显示实际的HTML代码。

如果您想接受安全的HTML但阻止/过滤危险输入,请使用经过测试,经过验证的第三方XSS过滤库,如HTMLPurifier:http://htmlpurifier.org/

不要重新发明轮子,特别是在安全方面。尤其是不要将正则表达式用于XSS白名单。

答案 2 :(得分:0)

过滤XSS的最佳方法取决于您正在开发的平台。正则表达式可用于防止多种类型的漏洞,但并不总是最好的。在PHP中阻止XSS的最佳方法是使用htmlspeicalchars();例如:

反光XSS:

print $_GET['xss'];

修补:

print htmlspecialchars($_GET['xss'],ENT_QUOTES);

为了测试这个,我们可以尝试执行一些JavaScript http://127.0.0.1/xss.php?xss=<script>alert(/xss/)</script> 在第一个例子中,我们将得到一个说/ xss /的弹出窗口。在修补的示例中,它将显示字符串的html安全版本: &LT;脚本&GT;警报(/ XSS /)LT /脚本&GT;

真正的问题大于<且小于>个符号,如果这些符号分别替换为&lt;&gt;,那么您可以安全地使用XSS。