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

使用活動記錄,每個資料庫介面卡生成查詢語法。它還允許更安全的查詢,因為值會自動轉義。