Laravel5.0 CSRFチェックを無効化(修改后可以像5.1以上那样从CSRF保护中排除指定URL)
Laravel5では全てのPOSTに勝手にCSRFチェックが付いてきます。
便利と言えば便利ですが、Laravel外からのPOSTを受け取りたいときなど大迷惑です。
CSRFチェックを排除する方法が何故かなかなか見当たらなかったので調査結果を記載。
Kernel
デフォルトで適用されるミドルウェアはapp/Http/Kernel.php
に記載されています。'App\Http\Middleware\VerifyCsrfToken'
が書かれている行を削除するとCSRFチェックが無効化されます。
この場合、あらゆるフォームに対してCSRFチェックが無くなります。
特定のフォームに対して有効にしたい場合、コントローラのコンストラクタに
$this->middleware('App\Http\Middleware\VerifyCsrfToken');
と書けば、そのコントローラでは有効になります。
しかし、各メソッド内に書いても効かないようです。
つまり、同一コントローラ内のフォームAには有効に、フォームBには無効にしたいといったことができません。
さらにデフォルトが危険側に倒れるため、この設定は微妙。
VerifyCsrfToken
CSRFチェックの本体はapp/Http/Middleware/VerifyCsrfToken.php
です。
ここにCSRFチェックを無効にしたいフォームを記載することでどうにかします。
デフォルトのVerifyCsrfToken::handle()は
public function handle($request, Closure $next){
return parent::handle($request, $next);
}
とだけ書かれていましたが、ここを変更。
// CSRFを除外したいURLリスト
protected $routes = [
'hoge/fuga',
'foo/bar',
'baz/qux',
];
//url已经经过url()函数处理,不需要再处理
// handleを変更
public function handle($request, Closure $next){
if($this->excludedRoutes($request)){
return $this->addCookieToResponse($request, $next($request));
}
return parent::handle($request, $next);
} /*
* CSRFを除外したいURLであるかどうかをチェックする。
* @param Request リクエスト
* @return boolean CSRFを除外したいURLであればtrue
**/
protected function excludedRoutes($request){
foreach($this->routes as $route){
if ($request->is($route)){ return true; }
}
}
これで特定URLだけCSRFチェックを外すことができました。
一部のフォームを操作したいだけなのに、いちいち全体に影響のあるファイルを変更しないといけないのが微妙。
コントローラ
HogeController::postForm(){
$this->disableMiddleware('App\Http\Middleware\VerifyCsrfToken');
}
みたいなことはできんのか?
http://www.camroncade.com/disable-csrf-for-specific-routes-laravel-5/
这种问题只能用vpn查
Laravel5.0 CSRFチェックを無効化(修改后可以像5.1以上那样从CSRF保护中排除指定URL)的更多相关文章
- Hadoop 修改源码以及将修改后的源码应用到部署好的Hadoop中
我的Hadoop版本是hadoop-2.7.3, 我们可以去hadoop官网下载源码hadoop-2.7.3-src,以及编译好的工程文件hadoop-2.7.3, 后者可以直接部署. 前者hadoo ...
- [Asp.net mvc]实体更新异常:存储区更新、插入或删除语句影响到了意外的行数(0)。实体在加载后可能被修改或删除。
学习asp.net mvc 时在更新实体进行SaveChanges()的时候出现了异常,异常如下: “/”应用程序中的服务器错误. 存储区更新.插入或删除语句影响到了意外的行数(0).实体在加载后可能 ...
- 存储区更新、插入或删除语句影响到了意外的行数(0)。实体在加载后可能被修改或删除。刷新 ObjectStateManager 项。
在用asp.net MVC3 的MusicStore时候 Edit某个数据项时提示下面的错误: 存储区更新.插入或删除语句影响到了意外的行数(0).实体在加载后可能被修改或删除.刷新 ObjectSt ...
- 我来告诉你:VS2019开发ASP.NET Core 3.0 Web项目,修改视图后,刷新浏览器看不到修改后的效果怎么处理
VisualStudio2019下一个2.2另一个3.0页面修改如下,但是3.0刷新没有任何变化,难道VS以后不能做前端开发了?大家可能没有看官方文档 根据文章所说你需要: 1.安装 Microsof ...
- Laravel5.0学习--03 Artisan命令
本文以laravel5.0.22为例. 简介 Artisan 是 Laravel 内置的命令行接口.它提供了一些有用的命令协助您开发,它是由强大的 Symfony Console 组件所驱动.利用它, ...
- Laravel5.0学习--02 实例进阶
本文以laravel5.0.22为例. 本节以新建一个简单的博客作为实例. 准备工作 数据库配置 .env文件(也可以直接修改config/database.php) DB_HOST=localhos ...
- Laravel5.0学习--01 入门
本文以laravel5.0.22为例. 生产环境建议使用laravel5.1版本,因为该版本是长期支持版本.5.1文档更详细:http://laravel-china.org/docs/5.1. 环境 ...
- 生产服务器环境最小化安装后 Centos 6.5优化配置[转]
内容目录 centos6.5最小化安装后配置网络: IP地址, 网关, 主机名, DNS 更新系统源并且升级系统 系统时间更新和设定定时任 创建普通用户并进行sudo授权管理 修改SSH端口号和屏蔽r ...
- 生产服务器环境最小化安装后 Centos 6.5优化配置备忘
生产服务器环境最小化安装后 Centos 6.5优化配置备忘 作者:Memory 发布于:2014-8-13 15:00 Wednesday 服务器 本文 centos 6.5 优化 的项有18处: ...
随机推荐
- java的nio之:java的nio系列教程之selector
一:Java NIO的selector的概述===>Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件.这样,一个单独的线程 ...
- (转) Deep Reinforcement Learning: Pong from Pixels
Andrej Karpathy blog About Hacker's guide to Neural Networks Deep Reinforcement Learning: Pong from ...
- k临近法的实现:kd树
# coding:utf-8 import numpy as np import matplotlib.pyplot as plt T = [[2, 3], [5, 4], [9, 6], [4, 7 ...
- Font Awesome字体图标
1.什么是字体图标字体图标是一个包含许多图标的字体库.可以理解为一种特殊的字体,只不过里面包含的都是图标. 2.Font Awesome图标字体库Font Awesome是目前最受欢迎最全面的图标字体 ...
- 怎么给OCR文字识别软件重编文档页面号码
ABBYY FineReader Pro for Mac OCR文字识别软件处理文档时,在FineReader文档中,页面的加载顺序即是页面的导入顺序,完成导入之后,文档的所有页面均会被编号,各编号会 ...
- linux概念之/proc与/sys
http://blog.chinaunix.net/uid-1835494-id-3070465.html proc/x:1/sched http://bbs.chinaunix.net/threa ...
- OpenJudge计算概论-简单算术表达式求值
/*===================================== 简单算术表达式求值 总时间限制: 1000ms 内存限制: 65536kB 描述 2位正整数的简单算术运算(只考虑整数运 ...
- Linux-实用的工具
1.Nethogs-查看进程占用带宽情况wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm # ...
- N天前涨停过的票
zd(0,300,10)B2:=REF(C,1)*1.1-C;B3:BARSLAST(B2<0.01)=ZD01;{n天前涨停股票}
- linux设置系统日期时间
设置当前日期: date -s 08/06/2015 设置当前时间:date -s 10:03:00 写入BIOS: clock -w 显示当前日期时间: date