如果我正在清理我的数据库插入,并且还转义了我使用 htmlentities($text, ENT_COMPAT, 'UTF-8')
编写的 HTML - 是否还需要过滤输入使用 xss_clean?它还有哪些其他好处?
最佳答案
xss_clean()很广泛,也很愚蠢。这个函数的 90% 对防止 XSS 没有任何作用。比如找字alert
但不是 document.cookie
.没有黑客会使用 alert
在他们的利用中,他们将使用 XSS 劫持 cookie 或读取 CSRF token 以制作 XHR。
然而运行htmlentities()
或 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() 文档:
Nothing is ever 100% foolproof, of course, but I haven't been able to get anything passed the filter.
也就是说,XSS 是一个 output problem
不是 input problem
.例如,此函数无法考虑变量已经在 <script>
中。标记或事件处理程序。它也不会阻止基于 DOM 的 XSS。您需要考虑您如何使用数据,以便使用最佳功能。过滤所有输入数据是不好的做法。它不仅不安全,而且还会破坏数据,使比较变得困难。
关于php - CodeIgniter - 为什么使用 xss_clean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5337143/