是否Codeignited自动清理和保护表单输入(对于DB注入和XSS等),我可以使用如下所示?CodeIgniter表单输入安全性
$this->input->post('name')
还是我需要自己保护它?有什么更好的方法来做到这一点?谢谢。
是否Codeignited自动清理和保护表单输入(对于DB注入和XSS等),我可以使用如下所示?CodeIgniter表单输入安全性
$this->input->post('name')
还是我需要自己保护它?有什么更好的方法来做到这一点?谢谢。
不,它不会给你100%的安全。
特别是因为它依赖于其中输入。 如果您担心XSS攻击,您可以传递一个TRUE作为第二个参数,并将XSS过滤器应用于该输入(但请注意,由于资源方面的操作相当成功,因此不要大量使用)
$this->input->post('name', TRUE)
在USERS手册上阅读关于Input class的更多信息。
如果输入进入数据库,比你要么$ this->db->escape()
(和它的其他表兄弟)手动逃避它,或者你使用query bindings或者,速度和简单起见,你可以依靠的Active Record Class哪些自动转义所有输入查询的数据。
(这个,如果你不想使用自定义转义,用mysql_real_escape_string,或mysqli_和PDO准备语句)
编辑:
是的,XSS过滤器可在CONFIGS装,但这是一个非常深入和彻底的过程,占用了大量的资源。正如他们所说:
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原生的htmlentities($str, ENT_QUOTES);
。
在应用程序的“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过滤,因为它非常耗费资源。
感谢您的回答。是否真的启用全球XSS过滤使用资源成本高昂?另外,如果是全局配置文件,不会自动应用?我是否仍然需要传递TRUE参数? (例如'$ this-> input-> post('name',TRUE); '。 – Roman 2011-06-14 05:22:55
@Roman如果你在全局应用它,你将不需要在本地执行 – 2011-06-14 05:24:30
@Roman @Damien说,你不需要''this-> input-> port('name')的',TRUE'位,但它肯定是昂贵的,应该避免,因为一切都会经过它,包括cookies,GET和POST参数,即使是你不想在整个过滤器中使用的那些。 – 2011-06-14 05:27:36
确保它在什么情况下?针对XSS?针对SQL注入? – alex 2011-06-14 05:13:06
@alex,对于SQL注入和XSS等都是这样。 – Roman 2011-06-14 05:15:02