CodeIgniter表单输入安全性

时间:2011-06-14 05:11:33

标签: php codeigniter

Codeignited是否自动清理并保护表单输入(用于DB注入和XSS等),我可以使用如下所示?

$this->input->post('name')

还是我需要自己保护它?有什么比这更好的方法呢?感谢。

2 个答案:

答案 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);