在本教程中,我们将学习如何在 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中文网其他相关文章!