前面说过,要在所有提交给
Laravel
的form表单中加入
{{csrf_field()}}
标签,这个模板会渲染出一个令牌,来防止
CSRF
攻击。
这里解释一下为什么一定要加入该标签。在app\Http\Kernel.php
中(kernel : 核心),设置的全局中间件之一:
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class
会对提交过来的表单进行上述令牌的验证,其他中间件的作用以后遇到再说。
解除CSRF保护
文档上的那个例子我是没有看懂,但是我看懂了怎么解除该保护,那就是把你不需要验证的路由设置在上述中间件文件中:
<?phpnamespace App\Http\Middleware;use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;class VerifyCsrfToken extends BaseVerifier{ 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