CodeIgniter窗体输入安全性


CodeIgniter Form input security

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