php - CodeIgniter - 为什么使用 xss_clean

标签 php html security codeigniter xss

如果我正在清理我的数据库插入,并且还转义了我使用 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/

相关文章:

javascript - 无法运行 php 代码, Angular 路由问题

php - 无法加载 xdebug.so : undefined symbol: gc_globals

php - iOS 中的 HTTP session cookie

html - ie6边距扩大20px

html - 如何在 CSS 中自动设置段落宽度?

javascript - 只从只有一个属性的对象中获取属性 JQuery

c# - Outlook 插件可以写入系统事件日志吗?

php - 如何正确导入多个命名空间

java - 使用 java.lang.String 存储敏感数据是否有害?

php - 防止多次手动执行外部 PHP 脚本