SQL 注入预防
SQL 注入是对数据库查询的攻击。在 PHP 中,我们使用 mysql_real_escape_string()
函数来防止这种情况以及其他技术,但 CodeIgniter 提供内置函数和库来防止这种情况。
我们可以通过以下三种方式阻止 CodeIgniter 中的 SQL 注入 -
- 转义查询
- 查询招标
- 活动记录类
转义查询
<?php
$username = $this->input->post('username');
$query = 'SELECT * FROM subscribers_tbl WHERE user_name = '.
$this->db->escape($email);
$this->db->query($query);
?>
$this->db->escape()
函数自动在数据周围添加单引号并确定数据类型,以便它只能转义字符串数据。
查询招标
<?php
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));
?>
在上面的例子中,问号(?)将被 query()
函数的第二个参数中的数组替换。以这种方式构建查询的主要优点是值会自动转义,从而产生安全查询。CodeIgniter 引擎会自动为你完成,因此你无需记住它。
活动记录类
<?php
$this->db->get_where('subscribers_tbl',array('status'=> active','email' => 'info@arjun.net.in'));
?>
使用活动记录,每个数据库适配器生成查询语法。它还允许更安全的查询,因为值会自动转义。