摘要:的處理在開(kāi)啟時(shí)為每個(gè)分配一個(gè)引入中間件后在里進(jìn)行核心處理判斷請(qǐng)求是否是這三種請(qǐng)求。獲取請(qǐng)求中的驗(yàn)證通過(guò)后將加入響應(yīng)包的里然后通過(guò)驗(yàn)證將請(qǐng)求通過(guò)遞交給下一個(gè)處理件。
跨站點(diǎn)請(qǐng)求偽造CSRF攻擊
攻擊者盜用用戶(hù)身份,通過(guò)偽造的身份以用戶(hù)的名義進(jìn)行非法請(qǐng)求從而在未經(jīng)用戶(hù)許可下完成某些非法操作。
Laravel的CSRF處理
在開(kāi)啟session時(shí)為每個(gè)session分配一個(gè)token
public function regenerateToken() {
$this->put("_token", Str::random(40));
}
引入VerifyCsrfToken中間件后在handle里進(jìn)行核心處理
public function handle($request, Closure $next)
{
if ( $this->isReading($request) || $this->runningUnitTests() || $this->inExceptArray($request) || $this->tokensMatch($request) ) { return $this->addCookieToResponse($request, $next($request)); } throw new TokenMismatchException;
}
- `$this->isReading()`判斷請(qǐng)求是否是`["HEAD", "GET", "OPTIONS"]`這三種請(qǐng)求。 - `$this->runningUnitTests()`判斷程序是否正在進(jìn)行單元測(cè)試。 - `$this->inExceptArray()`判斷請(qǐng)求是否需要進(jìn)行Crsf驗(yàn)證。 - `$this->tokensMatch()`進(jìn)行token驗(yàn)證。 protected function tokensMatch($request) { // 獲取請(qǐng)求url中的token $token = $this->getTokenFromRequest($request); return is_string($request->session()->token()) && is_string($token) && hash_equals($request->session()->token(), $token); } protected function getTokenFromRequest($request) { $token = $request->input("_token") ?: $request->header("X-CSRF-TOKEN"); if (! $token && $header = $request->header("X-XSRF-TOKEN")) { $token = $this->encrypter->decrypt($header); } return $token; }
驗(yàn)證通過(guò)后將csrf token加入響應(yīng)包的cookie里,然后通過(guò)驗(yàn)證將請(qǐng)求通過(guò)next遞交給下一個(gè)處理件。
protected function addCookieToResponse($request, $response)
{
$config = config("session"); $response->headers->setCookie( new Cookie( "XSRF-TOKEN", $request->session()->token(), Carbon::now()->getTimestamp() + 60 * $config["lifetime"], $config["path"], $config["domain"], $config["secure"], false ) ); return $response;
}
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/23254.html
摘要:之前簡(jiǎn)單的做了的傳遞參數(shù),可能只是大多數(shù)中的一種吧,這里做一個(gè)請(qǐng)求的實(shí)例默認(rèn)開(kāi)啟了防護(hù)功能當(dāng)然也可以關(guān)閉這個(gè)功能,設(shè)置的文件路徑如下注釋掉的就關(guān)閉了全局的防護(hù),但是一般不會(huì)這么做。 之前簡(jiǎn)單的做了url的get 傳遞參數(shù),可能只是 大多數(shù)中的一種吧,這里做一個(gè) post 請(qǐng)求的實(shí)例,laravel默認(rèn)開(kāi)啟了csrf 防護(hù)功能,當(dāng)然也可以關(guān)閉這個(gè)功能,設(shè)置的文件路徑 app/Http/K...
摘要:新增一篇新聞新增失敗輸入不符合要求請(qǐng)輸入標(biāo)題請(qǐng)輸入內(nèi)容新增文章上面代碼中的是為了防攻擊的,每個(gè)表單都必須存在。 本文我將結(jié)合簡(jiǎn)單例子,完成laravel框架下的增刪改查,希望會(huì)對(duì)大家有所幫助。在進(jìn)行之前,大家應(yīng)該保證自己的數(shù)據(jù)庫(kù)鏈接無(wú)誤,artisan命令能正常使用,路由鏈接無(wú)問(wèn)題。 一、創(chuàng)建控制器、路由避免影響其他路由,我們先注釋掉之前聯(lián)系時(shí)編寫(xiě)的所有路由。因?yàn)樯弦徽挛覀円呀?jīng)學(xué)會(huì)建立...
摘要:基本功能創(chuàng)建文章的第一步是用戶(hù)發(fā)請(qǐng)求,然后返回創(chuàng)建文章的頁(yè)面。實(shí)際上,會(huì)報(bào)錯(cuò)添加保護(hù)雖然我們完成了基本功能,但是提交請(qǐng)求的時(shí)候還是會(huì)報(bào)錯(cuò),其實(shí)這是防止攻擊。假如違反了規(guī)則,錯(cuò)誤信息會(huì)自動(dòng)被保存在閃存的中,即只對(duì)下一次請(qǐng)求生效。 基本功能 創(chuàng)建文章的第一步是用戶(hù)發(fā)請(qǐng)求,然后返回創(chuàng)建文章的頁(yè)面。 路由:處理用戶(hù)「創(chuàng)建文章」的請(qǐng)求 /routes/web.php Route::get(/po...
摘要:中有很多非常有用的輔助函數(shù)表單這樣就可以直接獲取自身維護(hù)的,比如通常是這樣用的或者你也可以這樣,直接獲取的表單這樣就會(huì)直接在輸出類(lèi)似下面的內(nèi)容了生成表單在使用路由的時(shí)候,有一些瀏覽器原生不能支持的,比如,等,這時(shí)候就可以使用一下代碼來(lái)生成表 Laravel 中有很多非常有用的輔助函數(shù)(helper function) 1.csrf token 表單 {{ csrf_token() }}...
摘要:原文地址安裝首先通過(guò)來(lái)安裝這個(gè)包編輯項(xiàng)目的文件在部分加入接下來(lái)從命令行更新接下來(lái)添加到的數(shù)組最后添加兩個(gè)類(lèi)鏈接到的數(shù)組創(chuàng)建表單打開(kāi)表單默認(rèn)是方法你可以隨意指定其他接收方法表單僅僅支持和方法和方法將會(huì)使用一個(gè)隱藏域添加到表單中來(lái)欺騙實(shí)現(xiàn)你可 原文地址: Laravel Collective Forms & HTML 安裝 首先通過(guò) composer 來(lái)安裝這個(gè) 包, 編輯項(xiàng)目的 comp...
閱讀 1829·2023-04-26 02:51
閱讀 2861·2021-09-10 10:50
閱讀 3059·2021-09-01 10:48
閱讀 3620·2019-08-30 15:53
閱讀 1824·2019-08-29 18:40
閱讀 411·2019-08-29 16:16
閱讀 2035·2019-08-29 13:21
閱讀 1823·2019-08-29 11:07