Codeigniter表单验证安全性

Red*_*Red 3 php security xss sql-injection codeigniter

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

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

请看下面

假设这ID是一个整数字段,以便我可以设置

$this->form_validation->set_rules("ID","FORM ID","required|trim|integer");
Run Code Online (Sandbox Code Playgroud)

我认为这足够了,因为如果ID字段具有除a之外的其他内容,则表单验证将返回错误integer.

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

要求

  1. 不允许HTML(或需要剥离这些标签)
  2. XSS干净
  3. SQL注入预防

目前我在做

$this->form_validation->set_rules("FIELD_NAME","FIELD_NAME","required|trim|xss_clean|strip_tags");
Run Code Online (Sandbox Code Playgroud)

这足以使系统安全吗?

Jee*_*usu 6

使用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');
Run Code Online (Sandbox Code Playgroud)

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

$this->db->where('username = '.$username);
$query = $this->db->get('users');
Run Code Online (Sandbox Code Playgroud)

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

$this->db->query('SELECT * FROM users WHERE username = '.$username);
Run Code Online (Sandbox Code Playgroud)

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

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

用法示例:

$this->db->query('SELECT * FROM users WHERE username = '.$this->db->escape($username));
Run Code Online (Sandbox Code Playgroud)

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