在本教程中,我们将学习如何在 Lithe 中实现 CSRF(跨站请求伪造)保护,以防止在您的应用程序中发出不需要的请求。本指南是为初学者设计的,所以让我们分成几个部分来学习!
CSRF(即跨站请求伪造)是一种攻击,其中用户被诱骗在经过身份验证的网站上执行未经授权的操作。这种攻击很危险,因为攻击者可以操纵数据或访问受限区域。为了防止这种情况,我们添加了一个安全层来防止可疑请求被处理。
让我们开始吧!
如果您尚未配置 Lithe,请首先使用以下命令安装框架:
composer create-project lithephp/lithephp nome-do-projeto cd nome-do-projeto
这将为您的 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; // Configura o middleware CSRF com verificação automática no corpo da requisição $app->use(csrf([ 'expire' => 600, // Expiração do token após 10 minutos 'checkBody' => true, // Habilita a verificação automática no corpo 'bodyMethods' => ['POST', 'PUT', 'DELETE'], // Define os métodos para verificar o CSRF no corpo ])); $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) { // Gera o campo de token CSRF $tokenField = $req->csrf->getTokenField(); // Envia o HTML com o token incluído no formulário return $res->send(" <form method='POST' action='/submit'> $tokenField <input type='text' name='data' placeholder='Digite algo' required> <button type='submit'>Enviar</button> </form> "); });
提交表单后,Lithe 会自动检查 token 是否有效。现在,让我们创建将接收和处理表单的路由。
composer create-project lithephp/lithephp nome-do-projeto cd nome-do-projeto
如果令牌无效或丢失,Lithe 将自动阻止请求并返回错误。
在前端,每当您需要发送 POST 请求(或其他数据更改方法)时,在请求正文或标头中包含 CSRF 令牌非常重要,具体取决于您配置中间件的方式。
对于使用 JavaScript 的用户,以下是如何通过获取请求发送令牌的示例:
composer require lithemod/csrf
在本教程中我们学习:
实施此保护后,您的应用程序可以更安全地抵御 CSRF 攻击,从而有助于保护用户数据的完整性。
有关更多详细信息,请查看 Lithe 官方文档。
以上是在 Lithe 上使用 CSRF 保护您的应用程序的详细内容。更多信息请关注PHP中文网其他相关文章!