Laravel默认是开启了CSRF功能,需要关闭此功能有两种方法:
方法一
打开文件:app\Http\Kernel.php
把这行注释掉:
'App\Http\Middleware\VerifyCsrfToken'
方法二
打开文件:app\Http\Middleware\VerifyCsrfToken.php
修改为:
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier; class VerifyCsrfToken extends BaseVerifier { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { // 使用CSRF //return parent::handle($request, $next); // 禁用CSRF return $next($request); } }
CSRF的使用有两种,一种是在HTML的代码中加入:
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
另一种是使用cookie方式。
使用cookie方式,需要把app\Http\Middleware\VerifyCsrfToken.php修改为:
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier; class VerifyCsrfToken extends BaseVerifier { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { return parent::addCookieToResponse($request, $next($request)); } }
使用cookie方式的CSRF,可以不用在每个页面都加入这个input的hidden标签。
当然,也可以对指定的表单提交方式使用CSRF,如:
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier; class VerifyCsrfToken extends BaseVerifier { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { // Add this: if($request->method() == 'POST') { return $next($request); } if ($request->method() == 'GET' || $this->tokensMatch($request)) { return $next($request); } throw new TokenMismatchException; } }
只对GET的方式提交使用CSRF,对POST方式提交表单禁用CSRF
修改CSRF的cookie名称方法
通常使用CSRF时,会往浏览器写一个cookie,如:
要修改这个名称值,可以到打开这个文件:vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken.php
找到”XSRF-TOKEN“,修改它即可。
当然,你也可以在app\Http\Middleware\VerifyCsrfToken.php文件中,重写addCookieToResponse(...)方法做到。
相关推荐
Laravel开发-laravel-token Laravel 4令牌管理
Laravel 会自动在用户 session (根据session_id 关联确认属于谁) 生成存放一个随机令牌(token)放在session中,并且如果使用 Laravel 的 {{form::open}} 会自动隐藏存在 csrf_token(),如果需要写html form 则需要在...
用了laravel就会知道其中的csrf验证功能,如果post传值的时候,没有csrf_token就会报如下的错误: 这是因5.2之后的版本中会默认在路由里面添加 web 中间件。 在app/Http/Kernel.php文件中有如下配置: 全部关闭 到...
从Laravel 5.3+开始,API路径被...Any HTML forms pointing to POST, PUT, or DELETE routes that are defined in the web routes file should include a CSRF token field. Otherwise, the request will be rejected.
方法一:去关掉laravel的csrf验证,但这个人不建议,方法也不写出来了。 方法二:把该接口写到api.php上就好了 方法三: 首先在页面加上 <meta name=csrf-token content={{ csrf_token() }} /> 然后请求的在...
程序内容相关:Laravel+ajax+CSRF 好吧还有好多能扯出来好像有点多而且微不足道得像面前鼠标垫上的纤维不重要所以就不扯了啊我废话好多 贴上自己的解决办法,两行内容 1.在页面上添加 <meta name=csrf-token ...
本文主要给大家介绍了关于Laravel框架中VerifyCsrfToken报错问题的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 报错情况 form 表单进行 post 方式提交数据时,遇到如下的报错情况....
Laravel标签助手 ... input type =" hidden " name =" _token " value =" csrf-token " > </ form > 您可以使用自定义标签帮助程序将此代码转换为以下代码: < form csrf method =
该库用于使用Ajax验证laravel表单并验证表单数据 依赖关系: LaravelAjaxValidator.js(必填) jQuery(必需) Noty.js(可选) 在您的html页面的页眉中添加Csrf-token(需要这两个中的任何一个); 向您的...
Laravel咖啡因支持该软件包这是一个MIT许可的...推理我选择这种方法来避免以下情况,以保持站点安全性的完整性: 在不安全的端点上公开CSRF令牌。 消除特定路线上甚至完全消除CSRF令牌的验证。 删除所有页面上的会话
开门见山,因为laravel以post形式提交数据时候需要加{{csrf_field()}}防止跨站攻击,所以当你用ajax提交表单时候自然也要加。 在网上看了很多的解决方式,我是用下面这种方法解决的: 1,首先在模板里面加上一个meta : ...
meta name =" csrf-token " content =" {{ csrf_token() }} " >< label>Title{{$article- > editor('title')}}</ label><!-- provide jQuery somewhere please! -->@include('ajaxable::jquery') 现在,您...
最后将核心代码摘出,放到 Larvel 框架以外运行,发现代码是没有问题的,因为对 Laravel 框架接触的太浅,忽视了 CSRF 的限制 ⒉ 解决方案 一般在表单提交时,都会存放一个隐藏的输入框 <input type="hidden" ...
Laravel / Vue自用API入门应用程序这是一个简单易用的API入门应用程序,具有在框架上构建的子域,并结合了 , , 和 。 它包括一个示例设置,该设置已登录并在每个子域上通过身份验证中间件测试链接进行了注册(下面...