3

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

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

请看下面

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

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

我认为这已经足够了,因为如果ID字段中包含的内容不是integer.

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

要求

  1. 不允许使用 HTML(或需要去除这些标签)
  2. XSS 清理
  3. SQL注入预防

目前我正在做

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

这足以使系统安全吗?

4

2 回答 2

6

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

根据您的要求:

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

alpha_numeric为了防止 SQL 注入攻击,您还可以在验证规则中使用类似的东西,通过只允许字母数字字符来防止潜在的危险字符。

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

方法一(去除无效字符)——利用活动记录库 WHERE 函数参数

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

方法二(无保护)——直接写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->e​​scape() 该函数确定数据类型,使其只能转义字符串数据。它还会自动在数据周围添加单引号,因此您不必:

示例用法:

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

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

于 2012-11-21T06:27:13.780 回答
1

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

如果您从表单中获取值,则可以通过在字段名称后添加 TRUE 来清除 XSS 示例:来自已提交表单的名为 first_name 的字段

$firstname = $this->input->post( 'first_name', TRUE );
于 2012-11-21T23:07:11.310 回答