Laravel CSRF
Laravel会自动为每个会话生成一个 CSRF「令牌」。该令牌用于验证经过身份验证的用户是否是向应用程序发出请求的用户。
当你定义一个Html表单的时候,需要在表单中包含一个隐藏的 CSRF 令牌字段,以便 CSRF 保护中间件可以验证该请求。可以使用辅助函数 csrf_field
来生成令牌字段:
<form method="POST" action="/profile">
{{ csrf_field() }}
...
</form>
web 中间件组里的 VerifyCsrfToken 中间件会自动验证请求里的令牌是否与存储在会话中令牌匹配
通过JavaScript发起请求的时候需要手动传递参数 CSRF令牌
CSRF 白名单
设置不需要CSRF保护的路由,可以通过将URI 添加到 VerifyCsrfToken
中间件中的 $except
属性来排除对这类路由的 CSRF 保护:
/**
* 这些 URI 将免受 CSRF 验证
*
* @var array
*/
protected $except = [
'stripe/*',
];
X-CSRF-TOKEN
除了检查 POST 参数中的 CSRF 令牌外,VerifyCsrfToken
中间件还会检查 X-CSRF-TOKEN
请求头。你可以将令牌保存在 HTML meta
标签中:
<meta name="csrf-token" content="{{ csrf_token() }}">
然后你就可以使用类似 jQuery 的库自动将令牌添加到所有请求的头信息中。这可以为基于 AJAX 的应用提供简单、方便的 CSRF 保护:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});