
- CodeIgniter 教程
- CodeIgniter - 首頁
- CodeIgniter - 概述
- CodeIgniter - 安裝 CodeIgniter
- CodeIgniter - 應用架構
- CodeIgniter - MVC 框架
- CodeIgniter - 基本概念
- CodeIgniter - 配置
- CodeIgniter - 資料庫操作
- CodeIgniter - 庫
- CodeIgniter - 錯誤處理
- CodeIgniter - 檔案上傳
- CodeIgniter - 傳送郵件
- CodeIgniter - 表單驗證
- CodeIgniter - 會話管理
- CodeIgniter - Flash 資料
- CodeIgniter - Temp 資料
- CodeIgniter - Cookie 管理
- CodeIgniter - 常用函式
- CodeIgniter - 頁面快取
- CodeIgniter - 頁面重定向
- CodeIgniter - 應用效能分析
- CodeIgniter - 基準測試
- CodeIgniter - 新增 JS 和 CSS
- CodeIgniter - 國際化
- CodeIgniter - 安全性
- CodeIgniter 有用資源
- CodeIgniter - 快速指南
- CodeIgniter - 有用資源
- CodeIgniter - 討論
CodeIgniter - 安全性
XSS 防禦
XSS 指跨站指令碼攻擊。CodeIgniter 自帶 XSS 過濾安全功能。此過濾器將阻止任何嘗試劫持 Cookie 並執行惡意活動的惡意 JavaScript 程式碼或任何其他程式碼。要透過 XSS 過濾器過濾資料,請使用如下所示的 **xss_clean()** 方法。
$data = $this->security->xss_clean($data);
只有在提交資料時才應使用此函式。可選的第二個布林引數也可用於檢查影像檔案是否存在 XSS 攻擊。這對於檔案上傳功能很有用。如果其值為 true,則表示影像安全,否則表示不安全。
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')); ?>
使用活動記錄,查詢語法由每個資料庫介面卡生成。它還允許更安全的查詢,因為值會自動轉義。
隱藏 PHP 錯誤
在生產環境中,我們通常不希望向使用者顯示任何錯誤訊息。如果在開發環境中啟用它以進行除錯,則會更好。這些錯誤訊息可能包含某些資訊,出於安全原因,我們不應向網站使用者顯示這些資訊。
有三個與錯誤相關的 CodeIgniter 檔案。
PHP 錯誤報告級別
不同的環境需要不同級別的錯誤報告。預設情況下,開發環境將顯示錯誤,而測試和生產環境將隱藏錯誤。根目錄下有一個名為 **index.php** 的 CodeIgniter 檔案,用於此目的。如果我們將零作為引數傳遞給 **error_reporting()** 函式,則將隱藏所有錯誤。
資料庫錯誤
即使您已關閉 PHP 錯誤,MySQL 錯誤仍然處於開啟狀態。您可以在 **application/config/database.php** 中關閉它。將 **$db** 陣列中的 **db_debug** 選項設定為 **FALSE**,如下所示。
$db['default']['db_debug'] = FALSE;
錯誤日誌
另一種方法是將錯誤轉移到日誌檔案。因此,它不會顯示在網站上的使用者面前。只需將 **$config** 陣列中的 **log_threshold** 值設定為 1,在 **application/config/config.php** 檔案中,如下所示。
$config['log_threshold'] = 1;
CSRF 防禦
CSRF 代表跨站請求偽造。您可以透過在 **application/config/config.php** 檔案中啟用它來防止此攻擊,如下所示。
$config['csrf_protection'] = TRUE;
當您使用 **form_open()** 函式建立表單時,它將自動插入 CSRF 作為隱藏欄位。您也可以使用 **get_csrf_token_name()** 和 **get_csrf_hash()** 函式手動新增 CSRF。**get_csrf_token_name()** 函式將返回 CSRF 的名稱,**get_csrf_hash()** 將返回 CSRF 的雜湊值。
CSRF 令牌每次提交都可以重新生成,或者您也可以在 CSRF Cookie 的整個生命週期內保持不變。透過將值為 **TRUE** 設定在 config 陣列中,鍵為 **‘csrf_regenerate’** 將重新生成令牌,如下所示。
$config['csrf_regenerate'] = TRUE;
您還可以透過在 config 陣列中使用鍵 **‘csrf_exclude_uris’** 設定它來將 URL 從 CSRF 保護中列入白名單,如下所示。您也可以使用正則表示式。
$config['csrf_exclude_uris'] = array('api/person/add');
密碼處理
許多開發人員不知道如何在 Web 應用程式中處理密碼,這可能是許多駭客如此容易侵入系統的原因。處理密碼時,應記住以下幾點:
不要以純文字格式儲存密碼。
始終對密碼進行雜湊處理。
不要使用 Base64 或類似的編碼來儲存密碼。
不要使用 MD5 或 SHA1 等弱雜湊演算法或已損壞的雜湊演算法。只使用強大的密碼雜湊演算法,例如 PHP 自身的密碼雜湊函式中使用的 BCrypt。
切勿以純文字格式顯示或傳送密碼。
不要對使用者的密碼設定不必要的限制。