
- Laravel 教程
- Laravel - 首頁
- Laravel - 概述
- Laravel - 安裝
- Laravel - 應用結構
- Laravel - 配置
- Laravel - 路由
- Laravel - 中介軟體
- Laravel - 名稱空間
- Laravel - 控制器
- Laravel - 請求
- Laravel - Cookie
- Laravel - 響應
- Laravel - 檢視
- Laravel - Blade 模板
- Laravel - 重定向
- Laravel - 資料庫操作
- Laravel - 錯誤與日誌
- Laravel - 表單
- Laravel - 本地化
- Laravel - Session
- Laravel - 驗證
- Laravel - 檔案上傳
- Laravel - 傳送郵件
- Laravel - Ajax
- Laravel - 錯誤處理
- Laravel - 事件處理
- Laravel - Facades
- Laravel - Contracts
- Laravel - CSRF 保護
- Laravel - 身份驗證
- Laravel - 授權
- Laravel - Artisan 命令列
- Laravel - 加密
- Laravel - 雜湊
- 理解發布流程
- Laravel - 遊客使用者許可權
- Laravel - Artisan 命令
- Laravel - 分頁自定義
- Laravel - Dump Server
- Laravel - Action URL
- Laravel 有用資源
- Laravel - 快速指南
- Laravel - 有用資源
- Laravel - 討論
Laravel - CSRF 保護
CSRF 指的是針對 Web 應用的跨站請求偽造攻擊。CSRF 攻擊是系統已認證使用者執行的未授權活動。因此,許多 Web 應用容易受到此類攻擊。
Laravel 提供以下方式的 CSRF 保護:
Laravel 內建了一個 CSRF 外掛,它為每個活躍使用者會話生成令牌。這些令牌驗證操作或請求是由相關的已認證使用者傳送的。
實現
本節詳細介紹了在 Laravel 中實現 CSRF 保護的方法。在繼續進行 CSRF 保護之前,需要注意以下幾點:
CSRF 是在 Web 應用中宣告的 HTML 表單內實現的。您必須在表單中包含一個隱藏的已驗證 CSRF 令牌,以便 Laravel 的 CSRF 保護中介軟體可以驗證請求。語法如下:
<form method = "POST" action="/profile"> {{ csrf_field() }} ... </form>
您可以方便地使用 JavaScript HTTP 庫構建基於 JavaScript 的應用程式,因為它將 CSRF 令牌包含到每個傳出的請求中。
名為 **resources/assets/js/bootstrap.js** 的檔案註冊所有 Laravel 應用程式的令牌,幷包含一個儲存帶有 **Axios HTTP 庫** 的 **csrf-token** 的 **meta** 標籤。
沒有 CSRF 令牌的表單
考慮以下程式碼行。它們顯示一個表單,該表單接收兩個引數作為輸入:**email** 和 **message**。
<form> <label> Email </label> <input type = "text" name = "email"/> <br/> <label> Message </label> <input type="text" name = "message"/> <input type = ”submit” name = ”submitButton” value = ”submit”> </form>
上述程式碼的結果是終端使用者可以檢視的以下表單:

上述表單將接受來自授權使用者的任何輸入資訊。這可能會使 Web 應用容易受到各種攻擊。
請注意,提交按鈕包含控制器部分的功能。**postContact** 函式用於關聯檢視的控制器中。如下所示:
public function postContact(Request $request) { return $request-> all(); }
請注意,該表單不包含任何 CSRF 令牌,因此作為輸入引數共享的敏感資訊容易受到各種攻擊。
帶有 CSRF 令牌的表單
以下程式碼行顯示了使用 CSRF 令牌重新設計的表單:
<form method = ”post” > {{ csrf_field() }} <label> Email </label> <input type = "text" name = "email"/> <br/> <label> Message </label> <input type = "text" name = "message"/> <input type = ”submit” name = ”submitButton” value = ”submit”> </form>
獲得的結果將返回包含以下令牌的 JSON:
{ "token": "ghfleifxDSUYEW9WE67877CXNVFJKL", "name": "TutorialsPoint", "email": "contact@tutorialspoint.com" }
這是單擊提交按鈕時建立的 CSRF 令牌。