2011-06-14 72 views
1

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

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

还是我需要自己保护它?有什么更好的方法来做到这一点?谢谢。

+0

确保它在什么情况下?针对XSS?针对SQL注入? – alex 2011-06-14 05:13:06

+0

@alex,对于SQL注入和XSS等都是这样。 – Roman 2011-06-14 05:15:02

回答

2

不,它不会给你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);

+0

谢谢,在手册中提到XSS过滤可以通过$ config ['global_xss_filtering'] = TRUE'启用。你是否认为这应该避免因为资源? – Roman 2011-06-14 05:18:32

+0

@罗曼看看它的代码,它做了很多检查和控制,所以是的,它相当的过热,你应该明智地根据情况使用它。 – 2011-06-14 05:25:24

+0

谢谢你。是否在启用'$ config ['csrf_protection'] = TRUE;'时有任何问题,因为它们没有给出任何警告。 – Roman 2011-06-14 05:32:58

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过滤,因为它非常耗费资源。

+0

感谢您的回答。是否真的启用全球XSS过滤使用资源成本高昂?另外,如果是全局配置文件,不会自动应用?我是否仍然需要传递TRUE参数? (例如'$ this-> input-> post('name',TRUE); '。 – Roman 2011-06-14 05:22:55

+0

@Roman如果你在全局应用它,你将不需要在本地执行 – 2011-06-14 05:24:30

+0

@Roman @Damien说,你不需要''this-> input-> port('name')的',TRUE'位,但它肯定是昂贵的,应该避免,因为一切都会经过它,包括cookies,GET和POST参数,即使是你不想在整个过滤器中使用的那些。 – 2011-06-14 05:27:36