在本教程中,我們將學習如何在 Lithe 中實現 CSRF(跨站請求偽造)保護,以防止向您的應用程式發出不需要的請求。本指南是為初學者設計的,所以我們將一步一步來!
CSRF(即跨站請求偽造)是一種攻擊,其中使用者被誘騙在經過身份驗證的網站上執行未經授權的操作。這種攻擊很危險,因為攻擊者可以操縱資料或存取受限區域。為了防止這種情況,我們添加了一個安全層來阻止可疑請求的處理。
讓我們開始吧!
如果您尚未設定 Lithe,請先使用以下指令安裝框架:
composer create-project lithephp/lithephp project-name cd project-name
這將為您的 Lithe 專案創建一個基本結構。
CSRF 中間件有助於產生和驗證 CSRF 令牌。要安裝它,請在專案中的終端機中執行以下命令:
composer require lithemod/csrf
現在,我們需要告訴 Lithe 我們想要使用 CSRF 中介軟體。開啟主檔案 src/App.php 並新增 CSRF 中介軟體。
use Lithe\Middleware\Security\csrf; use function Lithe\Orbis\Http\Router\router; $app = new \Lithe\App; // Configure the CSRF middleware with automatic checking in the request body $app->use(csrf([ 'expire' => 600, // Token expiration after 10 minutes 'checkBody' => true, // Enables automatic checking in the body 'bodyMethods' => ['POST', 'PUT', 'DELETE'], // Defines the methods for checking CSRF in the body ])); $app->use(router(__DIR__ . '/routes/web')); $app->listen();
這樣,CSRF 中間件就在我們的應用程式中處於活動狀態,而每個需要保護的請求都必須包含有效的令牌。
要使用 CSRF 保護,我們需要產生一個唯一的令牌並將其包含在請求中。我們將建立一個路由來發送自動包含 CSRF 令牌的表單。
use Lithe\Http\{Request, Response}; use function Lithe\Orbis\Http\Router\get; get('/form', function (Request $req, Response $res) { // Generate the CSRF token field $tokenField = $req->csrf->getTokenField(); // Send the HTML with the token included in the form return $res->send(" <form method='POST' action='/submit'> $tokenField <input type='text' name='data' placeholder='Type something' required> <button type='submit'>Submit</button> </form> "); });
提交表單後,Lithe 會自動檢查 token 是否有效。現在,讓我們建立接收和處理表單的路由。
composer create-project lithephp/lithephp project-name cd project-name
如果令牌無效或遺失,Lithe 將自動阻止請求並傳回錯誤。
在前端,每當您需要發送 POST 請求(或其他資料變更方法)時,在請求正文或標頭中包含 CSRF 令牌非常重要,具體取決於您如何配置中間件。
對於使用 JavaScript 的用戶,以下是如何透過取得請求發送令牌的範例:
composer require lithemod/csrf
在本教學中,我們學習了:
實施此保護後,您的應用程式可以更安全地抵禦 CSRF 攻擊,有助於保護使用者資料的完整性。
更多詳細信息,請查看 Lithe 官方文件。
以上是在 Lithe 中使用 CSRF 保護您的應用程式的詳細內容。更多資訊請關注PHP中文網其他相關文章!