CodeIgniter的XSS过滤器为什么不清除所有?

0 xss codeigniter

为什么CodeIgniter的XSS过滤器只通过特定事物的正则表达式做出反应,而不是首先清理所有输入,无论内容是否被污染?另外,为什么在输入期间而不是在输出上完成(就像它应该是?)

Wes*_*rch 8

为什么CodeIgniter的XSS过滤器只通过特定事物的正则表达式做出反应,而不是首先清理所有输入,无论内容是否被污染?

这没有多大意义.如果不事先检查,我们如何判断某些东西是否"被污染"?

根据CI的定义xss_clean(),我们并不总是想要消毒输入.正如您所提到的,重要的是输出 - 这就是我们需要注意XSS atacks的地方.如果我们总是使用CI "清理"输入xss_clean(),那么我将如何能够在我的博客上发布javascript或PHP代码示例,或者让用户在评论中执行此操作?它最终会得到[removed].

另外,为什么在输入期间而不是在输出上完成(就像它应该是?)

你必须启用全局XSS过滤器在你的CI配置,这将运行选项xss_clean()$_POST,$_GET$_COOKIE你之前自动数据可以让您的双手就可以了.这是保护您自己的最低级别,可以选择始终清除数据.例如:

// With the Input class on $_POST data
$this->input->post('username', TRUE); // Second parameter runs xss_clean

 // Using the Security class on any data
$this->security->xss_clean($username);

// Using the Form Validation class to automatically clean the input
$this->form_validation->set_rules('username', '', 'xss_clean');
Run Code Online (Sandbox Code Playgroud)

因为您仍然可以简单地使用$_POST['username'],通过启用全局过滤器,它已经为您进行了xss_cleaned.这是一种懒惰的方式,不幸的是,一旦清理了全局变量,就无法撤消它.

如果您已经知道XSS攻击何时何地发生 - 如果您愿意,可以轻松使用该功能.请记住,这并不会魔术般地把所有数据"安全",它只是避免一些更多的恶意代码注入的.一些更无害的东西</div>会越过这个过滤器.您应始终以适当的方式明确清理输入,以用于使用它的上下文.