W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
安全類包含了一些方法,用于幫助保護(hù)你的網(wǎng)站,以免受到跨站請(qǐng)求偽造(CSRF)的攻擊。
如果你加載這個(gè)類,只是想進(jìn)行 CSRF 的防護(hù),那就沒必要加載它,因?yàn)樗亲鳛橐粋€(gè)過濾器運(yùn)行的,而且沒有手動(dòng)調(diào)用的接口。
如果你想在某種情況下直接訪問這個(gè)類,你可以通過服務(wù)文件來加載它:
$security = \Config\Services::security();
打開你的 application/Config/Filters.php 文件并且全局開啟 csrf 過濾器,即可開啟 CSRF 防護(hù):
public $globals = [
'before' => [
'csrf'
]
];
你可以添加一個(gè) URI 的白名單,跳過 CSRF 保護(hù)(例如某個(gè) API 接口希望接受 原始的 POST 數(shù)據(jù)), 將這些 URI 添加到 csrf 過濾器的 ‘except’ 配置參數(shù)中:
public $globals = [
'before' => [
'csrf' => ['except' => ['api/record/save']]
]
];
同樣支持正則表達(dá)式(不區(qū)分大小寫):
public $globals = [
'before' => [
'csrf' => ['except' => ['api/record/[0-9]+']]
]
];
如果你使用 表單輔助函數(shù) ,form_open()
函數(shù)將會(huì)自動(dòng)地在你的表單中插入一個(gè)隱藏的 CSRF 字段。如果沒有插入這個(gè)字段, 你可以手動(dòng)調(diào)用 get_csrf_token_name()
和 get_csrf_hash()
這兩個(gè)函數(shù)。
<input type="hidden" name="<?= csrf_token() ?>" value="<?= csrf_hash() ?>" />
另外,你可以使用 csrf_field()
方法來幫你生成這個(gè)隱藏的 input
字段:
// Generates: <input type="hidden" name="{csrf_token}" value="{csrf_hash}" />
<?= csrf_field() ?>
令牌(tokens)默認(rèn)會(huì)在每一次提交時(shí)重新生成,或者你也可以設(shè)置成在 CSRF cookie 的生命周期內(nèi)一直有效。默認(rèn)情況下令牌重新生成提供了更嚴(yán)格的安全機(jī)制,但可能會(huì)對(duì) 可用性帶來一定的影響,因?yàn)榱钆坪芸赡軙?huì)變得失效(例如使用瀏覽器的返回前進(jìn)按鈕、 使用多窗口或多標(biāo)簽頁瀏覽、異步調(diào)用等等)。你可以修改下面這個(gè)參數(shù)來改變這一點(diǎn)。
public $CSRFRegenerate = true;
你將永遠(yuǎn)不需要直接使用安全類中的大多數(shù)方法。下面的一些方法,你可能會(huì)覺得有用,這些方法和 CSRF 防護(hù)無關(guān)。
sanitizeFilename()
嘗試對(duì)文件名進(jìn)行凈化,防止目錄遍歷嘗試以及其他的安全威脅,這在文件名作為用戶輸入的參數(shù)時(shí)格外有用。第一個(gè)參數(shù)是需要凈化的路徑名。
如果用戶輸入包含相對(duì)路徑是可以接受的,例如: file/in/some/approved/folder.txt ,那么你可以設(shè)置第二個(gè)可選參數(shù), $relative_path 為 true 。
$path = $security->sanitizeFilename($request->getVar('filepath'));
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: