首頁 > php框架 > Laravel > 主體

csrf攻擊在laravel的解決方法

WBOY
發布: 2022-06-21 16:07:53
原創
3527 人瀏覽過

解決方法:1、利用Laravel自動為每個使用者Session產生了一個“CSRF Token”,該Token可用於驗證登入使用者和發起請求者是否是同一人,如不是則請求失敗;2 、提供了一個全域幫助函數「csrf_token」來取得Token值,只需在視圖提交表單中加入token程式碼即可,語法為「<...value php="" echo="">」。

csrf攻擊在laravel的解決方法

本文操作環境:Windows10系統、Laravel9版、Dell G3電腦。

csrf攻擊在laravel中的解決方法

CSRF是跨站請求偽裝(Cross-site request forgery)的英文縮寫;

 Laravel框架中避免CSRF攻擊很簡單:

1、Laravel自動為每個使用者Session產生了一個CSRF Token,該Token可用於驗證登入使用者和發起請求者是否是同一人,如不是則請求失敗。 (原理和驗證碼是一致的。)

2、 Laravel提供了一個全域幫助函數csrf_token來取得Token值,因此只需在視圖提交表單中新增以下HTML程式碼即可在請求中帶上Token:

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
登入後複製

Laravel中如何避免CSRF攻擊

案例:透過案例實作csrf的機制驗證
1、建立兩個路由,一個用於展示表單(get),另外處理請求(post)

Route::get(&#39;test6&#39;,&#39;Home\TestController@test6&#39;);Route::post(&#39;test7&#39;,&#39;Home\TestController@test7&#39;);
登入後複製

2、建立需要的方法

	 public function test6(){
        return view(&#39;home.test.test6&#39;);
     }
     public function test7()
     {
         return "请求提交成功";
     }
登入後複製

3、建立需要的簡易表單

csrf攻擊在laravel的解決方法

4、提交效果(錯誤頁面)

csrf攻擊在laravel的解決方法

結論:透過剛​​才的案例,說明在laravel中csrf驗證機制預設是開啟的。

5、解決錯誤問題(如何透過csrf驗證)
解決想法:帶上csrf需要token值,隨著請求傳遞給後續的方法

<form action="/home/test/test7" method="post">
    用户名:<input type="text" name="username"><br>
    <input type="hidden" name="_token" value="{{csrf_token()}}">
    {{csrf_field()}}
    <input type="submit" value="提交"></form>
登入後複製

針對csrf_token方法的簡化:{{csrf_field()}}

具體的表現形式:

csrf攻擊在laravel的解決方法

#兩者的差異:
Csrf_token只是輸出token的值
Csrf_field輸出了一個整個的input隱藏域

在後期使用的時候怎麼選擇:大部分情況下可以自己根據情況選擇。但是有一個情況下開發者是沒有選擇權限的,必須需要使用csrf_token的,這個情況就是使用非同步提交表單的方式。

從CSRF驗證排除例外路由

並不是所有請求都需要避免CSRF攻擊,例如到第三方API取得資料的請求。
可以透過在VerifyCsrfToken(app/Http/Middleware/VerifyCsrfToken.php)中間件中將要排除的請求URL添加到$except屬性數組中:

透過編寫配置設定例外:
單一設定路由排除寫法

 &#39;home.test.test6&#39;,
登入後複製

多個元素之間透過「,」分割,遵循陣列寫法。

&#39;home.test.test6&#39;,&#39;home.test.test7&#39;
登入後複製

如果需要排除全部路由使用csrf的話,可以寫成:

&#39;*&#39;
登入後複製

【相關建議:laravel影片教學

以上是csrf攻擊在laravel的解決方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板