Codeignited是否自动清理和保护表单输入(用于DB注入和XSS等),我可以使用以下方法?
$this->input->post('name')
还是我需要自己保护它?有什么更好的方法可以做到这一点?谢谢
在应用程序的"config"文件夹中的"config.php"中,有一个用于启用全局XSS过滤的设置:
$config['global_xss_filtering'] = FALSE;
post()函数的第二个参数指定是否将XSS过滤器应用于该行:
$this->input->post('name', TRUE);
最后,您可以使用表单验证类来验证数据:
$this->form_validation->set_rules('name', 'Name', 'xss_clean');
您应该避免使用全局XSS过滤,因为它相当耗费资源。
否,它不能为您提供100%的安全性。
特别是因为它依赖于输入的位置。如果你担心XSS攻击,你可以传递一个TRUE作为第二个参数,并将XSS过滤器应用于该输入(但要注意,因为就资源而言,操作成本相当高,所以不要过度使用)
$this->input->post('name', TRUE)
阅读更多关于USer手册输入类的内容。
如果输入要进入数据库,那么您可以使用$this->db->escape()
(及其其他表亲)手动转义它,或者使用查询绑定,或者为了速度和简单起见,您可以依赖于活动记录类,它会自动转义进入查询的所有数据。
(如果您不想使用自定义转义,请使用mysql_real_sescape_string或mysqli_和PDO准备的语句)
编辑:
是的,XSS过滤器可以在配置中加载,但这是一个非常深入和彻底的过程,占用了大量资源。正如他们所说:
Note: This function should only be used to deal with data upon submission.
It's not something that should be used for general runtime processing since it requires
a fair amount of processing overhead.
请注意,您还拥有跨站点请求伪造保护(CSRF),更多信息请点击此处。
如果您担心性能问题,那么在html页面上输出$str之前,还可以使用php原生htmlentities($str, ENT_QUOTES);
。