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'));
?>

使用活动记录,每个数据库适配器生成查询语法。它还允许更安全的查询,因为值会自动转义。