如果我正在清理我的数据库插入,并且还转义我编写的 HTMLhtmlentities($text, ENT_COMPAT, 'UTF-8')
- 是否还需要使用 xss_clean 过滤输入?它还有什么其他好处?
xss_clean() http://docs.gipertext.com/framework/ci170/dc/d47/classCI__Input.html#39d5986d49a9d2d393c4a039b305fcea是广泛的,也是愚蠢的。这个函数的 90% 对于防止 XSS 没有任何作用。比如找这个词alert
但不是document.cookie
。没有黑客会使用alert
在他们的攻击中,他们将使用 XSS 劫持 cookie 或读取 CSRF 令牌来生成 XHR。
然而运行htmlentities()
or htmlspecialchars()
有了它是多余的。一个案例,其中xss_clean()
修复问题并htmlentities($text, ENT_COMPAT, 'UTF-8')
失败的情况如下:
<?php
print "<img src='$var'>";
?>
一个简单的poc是:
http://localhost/xss.php?var=http://domain/some_image.gif'%20onload=alert(/xss/)
这将添加onload=
图像标签的事件处理程序。阻止这种形式的 XSS 的方法是htmlspecialchars($var,ENT_QUOTES);
或者在这种情况下xss_clean()
也将阻止这种情况发生。
但是,引用 xss_clean() 文档:
没有什么是 100% 万无一失的
当然可以,但我没能得到
任何东西都通过了过滤器。
话虽这么说,XSS 是一个output problem
not an input problem
。例如,此函数无法考虑变量已经在<script>
标签或事件处理程序。它也无法阻止基于 DOM 的 XSS。你需要考虑您如何使用数据以便发挥最佳功能。过滤输入的所有数据是不好的做法。它不仅不安全,而且还会损坏数据,从而使比较变得困难。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)