Codeigniter表单验证安全性

时间:2012-11-21 05:18:59

标签: php security codeigniter sql-injection xss

我们使用Codeigniter创建了一个项目,它非常酷且高效。

CI具有良好的表单验证功能,有助于保护系统,但是我很难找到使用规则的正确方法。

请参阅下文

假设ID是一个整数字段,因此我可以设置

$this->form_validation->set_rules("ID","FORM ID","required|trim|integer");

我认为这足够了,因为如果ID字段不是integer,则表单验证会返回错误。

但是普通FORM字段(文本区域或普通输入类型文本字段)的规则应该是什么,

要求

  1. 不允许HTML(或需要剥离这些标记)
  2. XSS clean
  3. SQL注入预防
  4. 目前我在做

    $this->form_validation->set_rules("FIELD_NAME","FIELD_NAME","required|trim|xss_clean|strip_tags");
    

    这足以使系统安全吗?

2 个答案:

答案 0 :(得分:5)

使用Codeigniters验证库是加强安全性的第一步。您应该使用它来删除任何无效字符(HTML,潜在的XSS / SQL攻击等)。

根据您的要求:

strip_tags - 删除所有HTML标记
xss_clean - 删除任何潜在的xss攻击字符串

为防止SQL注入攻击,您还可以在验证规则中使用alpha_numeric之类的内容,以通过仅允许字母数字字符来防范潜在危险字符。

防止SQL注入的另一种方法是在向数据库传入数据和从数据库检索数据时使用Codeigniters活动记录库。如果您按预期使用Codeigniters活动记录,它将自动删除可能用于SQL注入攻击的危险字符。

方法1(删除无效字符) - 利用活动记录库WHERE函数参数

$query = $this->db->where('username', $username);
$query = $this->db->get('users');

方法2(无保护) - 直接写出where语句

$this->db->where('username = '.$username);
$query = $this->db->get('users');

方法3(无保护) - 将整个SQL语句直接写入查询函数

$this->db->query('SELECT * FROM users WHERE username = '.$username);

当不使用活动记录库时,codeigniter提供了转义字符串的功能(使它们可以安全地进入数据库)。

  

$ this-> db-> escape()此函数确定数据类型以便它   只能转义字符串数据。它还会自动添加单引号   围绕数据,所以你不必:

用法示例:

$this->db->query('SELECT * FROM users WHERE username = '.$this->db->escape($username));

参考:http://codeigniter.com/user_guide/database/queries.html

答案 1 :(得分:1)

还有一个很酷的CI安全功能

如果要从表单获取值,可以通过在字段名称后添加TRUE来进行XSS清理 示例:来自提交表单的名为first_name的字段

$firstname = $this->input->post( 'first_name', TRUE );