CSRF保护
简介
前面说过,要在所有提交给Laravel
的form表单中加入{{csrf_field()}}
标签,这个模板会渲染出一个令牌,来防止CSRF
攻击。
这里解释一下为什么一定要加入该标签。在app\Http\Kernel.php
中(kernel : 核心),设置的全局中间件之一:
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class
会对提交过来的表单进行上述令牌的验证,其他中间件的作用以后遇到再说。
解除CSRF保护
文档上的那个例子我是没有看懂,但是我看懂了怎么解除该保护,那就是把你不需要验证的路由设置在上述中间件文件中:
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier
{
/**
* The URIs that should be excluded from CSRF verification.
* 翻译一下就是下面的URL地址是被排除在CSRF保护之外的
* @var array
*/
protected $except = [
//这里就是举个例子
'users/store'
];
}
X-CSRF-Token
这个东西是什么我也不知道,但是知道怎么用。
- 在HTML页面的
meta
中使用{{csrf_token()}}
进行渲染 - 如果直接
form
表单提交的话那么就没关系,如果是Ajax
进行提交的话,需要将下面的内容一起提交给后台。
$.ajaxSetUp({
headers:{
'X-CSRF-TOKEN':$("meta[name='csrf-token']").attr('content')
}
});
这一段纯Jquery
代码就不解释了。
5.4