CSRF 保護(hù)

2018-02-24 15:51 更新

Laravel 提供簡(jiǎn)易的方法,讓您可以保護(hù)您的應(yīng)用程序不受到 CSRF (跨網(wǎng)站請(qǐng)求偽造) 攻擊??缇W(wǎng)站請(qǐng)求偽造是一種惡意的攻擊,借以代表經(jīng)過(guò)身份驗(yàn)證的用戶(hù)執(zhí)行未經(jīng)授權(quán)的命令。

Laravel 會(huì)自動(dòng)在每一位用戶(hù)的 session 中放置隨機(jī)的 token ,這個(gè) token 將被用來(lái)確保經(jīng)過(guò)驗(yàn)證的用戶(hù)是實(shí)際發(fā)出請(qǐng)求至應(yīng)用程序的用戶(hù):

插入 CSRF Token 到表單

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">

當(dāng)然也可以在 Blade 模板引擎使用:

<input type="hidden" name="_token" value="{{ csrf_token() }}">

您不需要手動(dòng)驗(yàn)證在 POST、PUT、DELETE 請(qǐng)求的 CSRF token。 VerifyCsrfToken HTTP 中間件將保存在 session 中的請(qǐng)求輸入的 token 配對(duì)來(lái)驗(yàn)證 token 。

X-CSRF-TOKEN

除了尋找 CSRF token 作為「POST」參數(shù),中間件也檢查 X-XSRF-TOKEN 請(qǐng)求頭,比如,你可以把 token 存放在 meta 標(biāo)簽中, 然后使用 jQuery 將它加入到所有的請(qǐng)求頭中:

<meta name="csrf-token" content="{{ csrf_token() }}" />

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

現(xiàn)在所有的 AJAX 請(qǐng)求會(huì)自動(dòng)加入 CSRF token:

$.ajax({
  url: "/foo/bar",
})

X-XSRF-TOKEN

Laravel 也在 cookie 中存放了名為 XSRF-TOKEN 的 CSRF token。你可以使用這個(gè) cookie 值來(lái)設(shè)置 X-XSRF-TOKEN 請(qǐng)求頭。一些 Javascript 框架,比如 Angular ,會(huì)自動(dòng)設(shè)置這個(gè)值。

注意: X-CSRF-TOKEN 和 X-XSRF-TOKEN 的不同點(diǎn)在于前者使用的是純文本而后者是一個(gè)加密的值,因?yàn)樵?Laravel 中 cookies 始終是被加密過(guò)的。如果你使用 csrf_token() 函數(shù)來(lái)作為 token 的值, 你需要設(shè)置 X-CSRF-TOKEN 請(qǐng)求頭。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)