Codeignited是否自动清理并保护表单输入(用于DB注入和XSS等),我可以使用如下所示?
$this->input->post('name')
还是我需要自己保护它?有什么比这更好的方法呢?感谢。
答案 0 :(得分:3)
在应用程序的“config”文件夹中的“config.php”中,有一个设置可用于启用全局XSS过滤:
$config['global_xss_filtering'] = FALSE;
post() function的第二个参数指定是否将XSS过滤器应用于该行:
$this->input->post('name', TRUE);
最后,您可以使用form validation class来验证数据:
$this->form_validation->set_rules('name', 'Name', 'xss_clean');
您应该避免使用全局XSS过滤,因为它占用大量资源。
答案 1 :(得分:2)
不,它不会给你100%的安全性。
特别是因为它依赖于输入的 where 。 如果您担心XSS攻击,可以将TRUE作为第二个参数传递,并将XSS过滤器应用于该输入(但要注意,因为操作在资源方面非常耗费,所以不要大量使用)
$this->input->post('name', TRUE)
详细了解“USer手册”中的Input class。
如果输入进入数据库,则要使用$ this->db->escape()
(和其他表兄弟)手动转义,或者使用query bindings或者为了速度和简单性,您可以依赖Active Record Class自动转义进入查询的所有dats。
(如果您不想使用自定义转义,使用mysql_real_escape_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),更多here。
如果你担心表演,你可以在html页面输出$ str之前使用php native htmlentities($str, ENT_QUOTES);
。