Laravel CSRF 令牌

作者:编程家 分类: laravel 时间:2025-10-07

Laravel CSRF 令牌

Laravel 是一个流行的 PHP 框架,提供了许多功能和工具来简化 Web 应用程序的开发过程。其中一个重要的安全功能是 Laravel CSRF 令牌,它可以有效地防止跨站请求伪造(Cross-Site Request Forgery,CSRF)攻击。本文将介绍什么是 CSRF 攻击,为什么需要 CSRF 令牌以及如何在 Laravel 中使用它来保护你的应用程序。

CSRF 攻击是一种利用用户已经通过身份验证的会话来执行非授权操作的攻击方式。攻击者可以通过诱使用户访问恶意网站或点击恶意链接,利用用户的身份执行一些危险的操作,如更改密码、删除账户等。这种攻击方式对于那些没有采取适当防范措施的应用程序来说是非常危险的。

为了防止 CSRF 攻击,Laravel 引入了 CSRF 令牌的概念。CSRF 令牌是一个随机生成的字符串,每次用户请求时都会被包含在表单中。当用户提交表单时,Laravel 会验证 CSRF 令牌的有效性。如果令牌无效,请求将被拒绝,从而保护应用程序免受 CSRF 攻击。

使用 CSRF 令牌保护 Laravel 应用程序

在 Laravel 中,使用 CSRF 令牌非常简单。首先,确保你的应用程序的所有 POST、PUT、PATCH 和 DELETE 请求都包含一个名为 `_token` 的隐藏字段,该字段的值应该是 `csrf_token()` 函数的返回值。你可以在表单中使用 Laravel 提供的 `@csrf` Blade 指令自动包含 CSRF 令牌字段。

下面是一个使用 CSRF 令牌保护表单提交的示例代码:

php

@csrf

在上面的代码中,`@csrf` 指令会自动生成一个隐藏的 `_token` 字段,并将其值设置为有效的 CSRF 令牌。当用户提交表单时,Laravel 将自动验证令牌的有效性。如果令牌无效,将抛出 `TokenMismatchException` 异常。

此外,你还可以使用 `csrf_field()` 函数手动生成 CSRF 令牌字段。例如:

php

{{ csrf_field() }}

以上代码与使用 `@csrf` 指令的效果相同。

自定义 CSRF 令牌字段名称

默认情况下,Laravel 使用 `_token` 作为 CSRF 令牌字段的名称。如果你想自定义字段名称,可以在 `VerifyCsrfToken` 中间件中修改 `$request->input('_token')` 的值。例如,如果你想将字段名称修改为 `csrf_token`,可以在 `App\Http\Middleware\VerifyCsrfToken` 类中添加以下代码:

php

protected function tokensMatch($request)

{

$token = $request->input('csrf_token') ?: $request->header('X-CSRF-TOKEN');

return $request->session()->token() == $token;

}

在上述代码中,我们修改了 `tokensMatch` 方法中获取 CSRF 令牌字段的逻辑。

CSRF 攻击对于 Web 应用程序来说是一个严重的安全威胁。为了保护你的 Laravel 应用程序免受 CSRF 攻击,你可以使用 Laravel CSRF 令牌来验证请求的有效性。通过在表单中包含 CSRF 令牌字段,并在服务器端验证令牌的有效性,你可以确保只有经过授权的用户才能执行敏感操作。