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 應用程式的令牌,並包含 meta 標籤,該標籤儲存 csrf-tokenmeta 標籤,該標籤儲存 csrf-token
沒有 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 令牌。 🎜
以上是Laravel - CSRF 保護的詳細內容。更多資訊請關注PHP中文網其他相關文章!