CodeIgniter 使用手冊版本 2.2.0


Security 類別

Security 類別提供函數幫助您建立安全 application,處理 input 資料,增加網站安全性.

XSS 過濾

CodeIgniter 內建一個防止跨站腳本攻擊的過濾器,它可以自動過濾所有 POST 與 COOKIE 的資料,或是你自己一項一項過濾。因為進行處理需要額外的負擔,而且你也不是在所有的狀況下需要使用,所以預設它 不會 全域執行。

XSS 過濾器會搜尋常使用來觸發 Javascript 或是其他企圖挾持 cookie 或是進行危險活動的程式碼。如果碰到不允許的東西,它會用安全的方式把它轉成html entities來呈現。

注意: 這個函數應該只用在處理提交(submit)的資料。它並不適用在一般執行時處理的狀況下,因為它需要相當大量的負載支出。

要用XSS過濾器來過濾資料,要用這個函數:

$this->security->xss_clean()

使用參考範例:

$data = $this->security->xss_clean($data);

如果你要每次碰到 POST 或是 COOKIE 時都會自動過濾,你可以編輯 application/config/config.php 檔案並設定以下項目:

$config['global_xss_filtering'] = TRUE;

注意: 如果你使用表單驗證類別,它也會給你XSS過濾的選項。

可選的第二個參數 is_image 允許這個函數用來測試影像以預防潛在的 XSS 攻擊,這對於檔案上傳的安全性非常有用。當這個參數設定為 TRUE 時,這個函數就不是回傳替代字串,而是在影像檔是安全的時回傳 TRUE ,並在影像檔包含可能讓瀏覽器執行的潛在危險資訊時回傳 FALSE。

if ($this->security->xss_clean($file,TRUE) === FALSE)
{
    // file failed the XSS test
}

$this->security->sanitize_filename()

當允許使用者輸入檔名時,最好的方式是針對輸入值做消毒的動作,以防出現路徑遍訪 (directory traversal) 的漏洞:

$filename = $this->security->sanitize_filename($this->input->post('filename'));

當接受使用者輸入路徑時,例如: file/in/some/approved/folder.txt 你可以將第二個參數 $relative_path 設定為 TRUE

$filename = $this->security->sanitize_filename($this->input->post('filename'), TRUE);

Cross-site request forgery (CSRF)

你可以啟動 (CSRF) 的預防,透過 application/config/config.php,並且設定如下:

$config['csrf_protection'] = TRUE;

如果你使用 form helper 中的 form_open() 函數時,隱藏的 csrf 欄位就會自動的藏在表單中