防止XSS漏洞的最佳做法是什么?
这里的很多人都提到了白名单,这听起来不错,但我看到很多人使用RegEx来定义白名单。这看起来本身存在缺陷,因为它取决于许多因素,其中最重要的是RegEx实现以及编写表达式的人不会犯错的技巧。因此,许多XSS攻击都成功,因为它们使用techniques to make the regex accept them。
什么是最好的(虽然可能比正则表达式白名单更加劳动密集)避免这些漏洞/消毒用户输入的方法?理论上甚至可以完全消毒用户输入吗?
答案 0 :(得分:4)
查看AntiXSS库。
答案 1 :(得分:2)
如果您想接受安全的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;
真正的问题大于<
且小于>
个符号,如果这些符号分别替换为<
和>
,那么您可以安全地使用XSS。