CSRF 保护
laravel 会自动为每个活跃用户的会话生成一个CSRF【令牌】,再html表单中,都应该在表单中包含一个隐藏的CSRF标记字段,以便CSRF保护中间件可以验证该请求,你可以使用@csrf Blade指令来生成令牌字段
<form method='POST' action='/profile'>
@csrf
</form>
包含再Web中间件组里的 VerifyCsrfToken [中间件] 会自动验证请求里的令牌是否与存储在会话中令牌匹配。
CSRF令牌 & JavaScript
当构建由javascript驱动的应用时,可以方便的让JavaScript HTTP 函数发起每一个请求时自动附上CSRF令牌。默认情况下,resources/js/bootstap.js 文件会用Axios HTTP 函数库注册的 crsf-token meta标签中的值。如果你不使用这个函数库,你需要手动为你的应用配置此行为。
CSRF白名单
典型做法,你可以把这类路由放到routes/web.php 外,因为 RouteServiceProvider 的 web 中间件使用该文件中的所有路由。不过,你也可以通过将这类URL添加到 VerifyCsrfToken 中间件的$except 属性来排除对这类路由的CSRF保护,如图所示:
X-CSRF-TOKEN
除了检查POST参数中的CSRF令牌外,VerifyCsrfToken 中间件还会检查 X-CSRF-TOKEN 请求头。你应该将令牌保存在HTML meta标签中,如下:
<meta name='csrf-token' content='{{ csrf-token() }}'>