Laravel CSRF 保护
Posted PHP在线中心
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel CSRF 保护相关的知识,希望对你有一定的参考价值。
CSRF 保护 介绍
@csrf
Blade 指令来生成令牌字段,如下:
<form method="POST" action="/profile">
@csrf
...
</form>
web
中间件组里
VerifyCsrfToken
中间件会自动验证请求里的令牌是否与存储在会话中令牌匹配。
CSRF 令牌 & javascript
函数库发起每一个请求时自动附上 CSRF 令牌。默认情况下,
resources/js/bootstrap.js
文件中提供的 Axios HTTP 库会使用 cookie 中加密的
XSRF-TOKEN
的值然后在请求时自动发送
X-XSRF-TOKEN
标头。如果不使用此库,则需要为应用程序手动配置此行为。
CSRF 白名单
routes/web.php
外,因为
RouteServiceProvider
的
web
中间件适用于该文件中的所有路由。不过,你也可以通过将这类 URL 添加到
VerifyCsrfToken
中间件的
$except
属性来排除对这类路由的 CSRF 保护,如下所示:
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
/**
* 从CSRF验证中排除的URI
*
* @var array
*/
protected $except = [
'stripe/*',
'http://example.com/foo/bar',
'http://example.com/foo/*',
];
}
Tip:当 运行测试 时, CSRF 中间件会自动禁用。
X-CSRF-TOKEN
VerifyCsrfToken
中间件还会检查
X-CSRF-TOKEN
请求头。你应该将令牌保存在 HTML
meta
标签中,如下:
<meta name="csrf-token" content="{{ csrf_token() }}">
meta
标签,就可以指示像 jQuery 这样的库自动将令牌添加到所有请求的头信息中。还可以为基于 AJAX 的应用提供简单,方便的 CSRF 保护。如下:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
X-XSRF-TOKEN
XSRF-TOKEN
cookie中,该 cookie 包含在框架生成的每个响应中。你可以使用 cookie 值来设置
X-XSRF-TOKEN
请求头。
X-XSRF-TOKEN
头中。
Tip:默认情况下, resources/js/bootstrap.js
文件包含的 Axios HTTP 库,会自动为你发送。
以上是关于Laravel CSRF 保护的主要内容,如果未能解决你的问题,请参考以下文章