安全類
安全類包含一些方法,能幫助您創(chuàng)建安全的應(yīng)用程序,對(duì)輸入的數(shù)據(jù)進(jìn)行安全方面的處理.
XSS 過濾
CodeIgniter 包含了跨站腳本攻擊的防御機(jī)制,它可以自動(dòng)地對(duì)所有POST以及COOKIE數(shù)據(jù)進(jìn)行過濾,或者您也可以針對(duì)單個(gè)項(xiàng)目來運(yùn)行它。默認(rèn)情況下,它 不會(huì) 全局運(yùn)行,因?yàn)檫@樣也需要一些執(zhí)行開銷,況且您也不一定在所有情況下都用得到它.
XSS過濾器會(huì)查找那些常被用來觸發(fā)JavaScript或者其他類型的企圖劫持cookie或進(jìn)行其它惡意行為的代碼. 如果發(fā)現(xiàn)任何不允許的內(nèi)容,它將把那些內(nèi)容轉(zhuǎn)換為字符實(shí)體,以確保安全.
注意: 此函數(shù)只應(yīng)該用來處理那些提交過來的數(shù)據(jù). 它不適合在常規(guī)運(yùn)行時(shí)使用,因?yàn)樗鼒?zhí)行時(shí)的開銷也是不容忽視的.
要使用XSS過濾器對(duì)數(shù)據(jù)進(jìn)行過濾,請(qǐng)使用此函數(shù):
$this->security->xss_clean()
下面是一個(gè)使用實(shí)例:
$data = $this->security->xss_clean($data);
如果你希望過濾器能自動(dòng)過濾所有被訪問到的POST或者COOKIE數(shù)據(jù),請(qǐng)打開你的 application/config/config.php 文件,進(jìn)行如下設(shè)置即可啟用自動(dòng)過濾:
$config['global_xss_filtering'] = TRUE;
說明: 如果你使用表單驗(yàn)證類,同樣也有XSS過濾的選項(xiàng).
第二個(gè)可選的參數(shù), is_image, 允許此函數(shù)對(duì)圖片進(jìn)行檢測(cè)以發(fā)現(xiàn)那些潛在的 XSS 攻擊, 這對(duì)于保證文件上傳的安全非常有用. 當(dāng)此參數(shù)被設(shè)置為 TRUE 時(shí), 此函數(shù)的返回值不是一個(gè)修改過的字符串而是一個(gè)布爾值, 如果圖片是安全的則返回 TRUE, 相反, 如果圖片中包含有潛在的、可能會(huì)被瀏覽器嘗試運(yùn)行的惡意信息, 函數(shù)將返回FALSE.
if ($this->security->xss_clean($file, TRUE) === FALSE)
{
????// file failed the XSS test
}
$this->security->sanitize_filename()
當(dāng)接受用戶所輸入的文件名時(shí), 最好是對(duì)它們進(jìn)行一下“消毒”, 這樣能避免目錄被遍歷以及其它安全相關(guān)的問題. 要完成這項(xiàng)工作, 請(qǐng)使用安全類中的 sanitize_filename() 方法. 下面是一個(gè)實(shí)例:
$filename = $this->security->sanitize_filename($this->input->post('filename'));
如果你允許用戶所輸入的內(nèi)容中包含有相對(duì)路徑,例如 file/in/some/approved/folder.txt, 你可以把第二個(gè)可選參數(shù) $relative_path 設(shè)置為TRUE.
$filename = $this->security->sanitize_filename($this->input->post('filename'), TRUE);
跨站請(qǐng)求偽造(Cross-site request forgery,CSRF)
打開你的 application/config/config.php 文件,進(jìn)行如下設(shè)置,即可啟用 csrf 保護(hù):
$config['csrf_protection'] = TRUE;
如果你使用 表單輔助函數(shù), form_open() 函數(shù)將會(huì)自動(dòng)地在你的表單中插入一個(gè)隱藏的csrf字段.
?