W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
安全類包含了一些方法,用于安全的處理輸入數(shù)據(jù),幫助你創(chuàng)建一個安全的應(yīng)用。
CodeIgniter 自帶了一個 XSS 過濾器來防御攻擊,它可以設(shè)置為自動運行過濾 所有遇到的 POST 和 COOKIE 數(shù)據(jù),也可以針對某一條數(shù)據(jù)進行過濾。默認情況下 它不是全局運行的,因為它會有相當(dāng)?shù)拈_銷,況且你并不是在所有地方都需要它。
XSS 過濾器會查找那些常被用來觸發(fā) JavaScript 腳本或者其他類型的企圖劫持 Cookie 或者其它惡意行為的代碼。如果發(fā)現(xiàn)任何不允許的內(nèi)容,它將把那些內(nèi)容 轉(zhuǎn)換為字符實體,以確保安全。
注意:這個函數(shù)只應(yīng)該用來處理那些提交過來的數(shù)據(jù),它不適合在一般情況下使用, 因為它的執(zhí)行會有相當(dāng)大的開銷。
使用 XSS 過濾器過濾數(shù)據(jù)可以使用 xss_clean() 方法:
$data = $this->security->xss_clean($data);
它還有一個可選的第二個參數(shù) is_image ,允許此函數(shù)對圖片進行檢測以發(fā)現(xiàn)那些潛在的 XSS 攻擊, 這對于保證文件上傳的安全非常有用。當(dāng)此參數(shù)被設(shè)置為 TRUE 時, 函數(shù)的返回值將是一個布爾值,而不是一個修改過的字符串。如果圖片是安全的則返回 TRUE , 相反, 如果圖片中包含有潛在的、可能會被瀏覽器嘗試運行的惡意信息,函數(shù)將返回 FALSE 。
if ($this->security->xss_clean($file, TRUE) === FALSE)
{
// file failed the XSS test
}
打開你的 application/config/config.php 文件,進行如下設(shè)置,即可啟用 CSRF 保護:
$config['csrf_protection'] = TRUE;
如果你使用 表單輔助函數(shù) ,form_open() 函數(shù)將會自動地在你的表單中插入一個隱藏的 CSRF 字段。如果沒有插入這個字段, 你可以手工調(diào)用get_csrf_token_name() 和 get_csrf_hash() 這兩個函數(shù)。
$csrf = array(
'name' => $this->security->get_csrf_token_name(),
'hash' => $this->security->get_csrf_hash()
);
...
<input type="hidden" name="<?=$csrf['name'];?>" value="<?=$csrf['hash'];?>" />
令牌(tokens)默認會在每一次提交時重新生成,或者你也可以設(shè)置成在 CSRF cookie 的生命周期內(nèi)一直有效。默認情況下令牌重新生成提供了更嚴格的安全機制,但可能會對 可用性帶來一定的影響,因為令牌很可能會變得失效(譬如使用瀏覽器的返回前進按鈕、 使用多窗口或多標(biāo)簽頁瀏覽、異步調(diào)用等等)。你可以修改下面這個參數(shù)來改變這一點。
$config['csrf_regenerate'] = TRUE;
另外,你可以添加一個 URI 的白名單,跳過 CSRF 保護(例如某個 API 接口希望接受 原始的 POST 數(shù)據(jù)),將這些 URI 添加到 'csrf_exclude_uris' 配置參數(shù)中:
$config['csrf_exclude_uris'] = array('api/person/add');
URI 中也支持使用正則表達式(不區(qū)分大小寫):
$config['csrf_exclude_uris'] = array(
'api/record/[0-9]+',
'api/title/[a-z]+'
);
classCI_Security
xss_clean($str[, $is_image = FALSE])
參數(shù):
返回: XSS-clean data
返回類型: mixed
嘗試移除輸入數(shù)據(jù)中的 XSS 代碼,并返回過濾后的數(shù)據(jù)。 如果第二個參數(shù)設(shè)置為 TRUE ,將檢查圖片中是否含有惡意數(shù)據(jù),是的話返回 TRUE ,否則返回 FALSE 。
sanitize_filename($str[, $relative_path = FALSE])
參數(shù):
返回: Sanitized file name/path
返回類型: string
嘗試對文件名進行凈化,防止目錄遍歷嘗試以及其他的安全威脅,當(dāng)文件名作為用戶輸入的參數(shù)時格外有用。
$filename = $this->security->sanitize_filename($this->input->post('filename'));
如果允許用戶提交相對路徑,譬如 file/in/some/approved/folder.txt ,你可以將第二個參數(shù) $relative_path 設(shè)置為 TRUE 。
$filename = $this->security->sanitize_filename($this->input->post('filename'), TRUE);
get_csrf_token_name()
返回: CSRF token name
返回類型: string
返回 CSRF 的令牌名(token name),也就是 $config['csrf_token_name'] 的值。
get_csrf_hash()
返回: CSRF hash
返回類型: string
返回 CSRF 哈希值(hash value),在和 get_csrf_token_name() 函數(shù)一起使用時很有用,用于生成表單里的 CSRF 字段 以及發(fā)送有效的 AJAX POST 請求。
entity_decode($str[, $charset = NULL])
參數(shù):
返回: Entity-decoded string
返回類型: string
該方法和 ENT_COMPAT 模式下的 PHP 原生函數(shù) html_entity_decode() 差不多,只是它除此之外,還會檢測不以分號結(jié)尾的 HTML 實體,因為有些瀏覽器允許這樣。
如果沒有設(shè)置 $charset 參數(shù),則使用你配置的 $config['charset'] 參數(shù)作為編碼格式。
get_random_bytes($length)
參數(shù):
返回: A binary stream of random bytes or FALSE on failure
返回類型: string
這是一種生成隨機字符串的簡易方法,該方法通過按順序調(diào)用 mcrypt_create_iv(), /dev/urandom 和 openssl_random_pseudo_bytes() 這三個函數(shù),只要有一個函數(shù)是可用的,都可以返回隨機字符串。
用于生成 CSRF 和 XSS 的令牌。
注解
輸出并不能保證絕對安全,只是盡量做到更安全。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: