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