CodeIgniter的表单验证库如何处理XSS过滤?

时间:2009-08-11 06:26:18

标签: php validation codeigniter

CodeIgniter表单验证库提供了从正在验证的表单中“准备”数据的选项。以下是文档中的代码段:

  

$this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[5]|max_length[12]|xss_clean');

最后的xss_clean参数应该通过xss_clean函数传递帖子数据。

我想知道如何使用$_POST数据usernamexss_clean函数是否直接作用于$_POST变量,以便我可以执行:$username = $this->input->post('username');,并实际获取过滤后的数据?如果我在验证行之前放置最后一个语句怎么办?在这种情况下,$username是否会包含未经过滤的数据?提前谢谢!

3 个答案:

答案 0 :(得分:2)

验证确实是xss clean,但它与$this->input->post('username')无关。那条线就会自动清除xss,完全独立于你的验证内容(假设你有全局xss过滤)。事实上,我愿意打赌,两者都会实际上xss清理它两次,因为我很确定验证只会创建数组的副本..它不会实际上修改$ _POST。

但正如我所说,如果您通过$this->input->post('username')访问它,它将被清除,无论如何。

答案 1 :(得分:0)

来自user guide

“如果遇到任何不允许的情况,则通过将数据转换为字符实体来使其安全”

所以是的,在通过使用xss选项设置的表单验证运行$ this-> input-> post('username')后,任何脏数据都将清除。

是的,如果您将该语句放在验证行之前,它将不会被清除。

请注意,您可以在所有表​​单提交的数据上全局运行xss,这样您就不需要将其包含在验证规则中。

答案 2 :(得分:0)

我强烈建议查看system / libraries / Input.php您可以确切地了解工作是如何完成的。

我总是建议打开全局xss_clean。对性能的影响非常小,除非你在某些字段上检查xss,故意。