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

时间:2011-06-11 16:40:13

标签: codeigniter xss

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

1 个答案:

答案 0 :(得分:8)

  

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

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

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

  

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

您可以选择在CI配置中启用全局xss过滤器,该配置将在您之前自动在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');

由于您仍然可以简单地使用$_POST['username'],因此通过启用全局过滤器,它已经为您进行了xss_cleaned。这是一种懒惰的方法,不幸的是,一旦这些全局变量被清除,就没有办法撤消它。

如果您已经知道可能发生XSS攻击的时间和地点 - 如果您愿意,可以轻松使用该功能。请记住,这不会神奇地使所有数据“安全”,它只是防止了一些更恶意的代码注入。像</div>这样无害的东西会通过这个过滤器。您应始终以适当的方式明确清理输入,以用于使用它的上下文。