<input type="hidden" name="_csrf" value="<?=Yii::$app->request->csrfToken?>" />
如果你添加了以上标签还是报错那么你需要坚持看完这篇文档

刚开始做Yii2开发的程序猿基本上都遇到过这个错误,因为在程序设计中避免不了的要向服务器提交数据,那就需要使用到表单。
其实这个错误的提示很明确的其中文错误就是提交的数据验证不通过。我们下来分析导致这个错误的原因。 导致了这个错误的原因是Yii2框架本身的安全机制需要在提交表单时验证CSRF,为了防止CSRF攻击,这对于数据的安全性和防止表单的重复提交时很好也是很简单的一种解决方案。

下边是常规的解决方案:

1.在form标签中添加<input type="hidden" name="_csrf" value="<?=Yii::$app->request->csrfToken?>" />

2.在控制器开始部分添加public $enableCsrfValidation = false;

相信第二种方法一定能够解决问题,但是不安全。你关了CSRF后相当于少了一层安全机制。但是使用第一种方法添加了隐藏标签不一定能够成功,这是为什么呢?让我们仔细分析。

一、yii2框架如何获取CSRF进行验证

我们再方法中并没有手动接受CSRF的值进行验证,那么这一部分是由框架自己来完成的,框架自己来完成就会面临一个问题。你在回传CSRF时对于这个值保存在什么变量中就需要有个统一的约定,不然你传入的是name="_csrf"但是框架接收时是$_POST['csrf-token'](举例而已)那么框架永远接收不到你的值也就没有办法验证通过。

而这一部分是由yii2中的request来完成的。

二、如何约定CSRF的变量名

我们知道CSRF验证是由request组件来完成的,而且我们知道yii2的组件都是可以单独配置的,那么我们打开配置文件。

'components' => [
'request' => [
'csrfParam' => '_csrf-frontend',
],

在配置文件中如果有request的配置那么我们就可以配置CSRF的变量名了例如在我的程序中配置的变量名是_csrf-frontend那么在添加form隐藏标签时就需要和这儿的配置一致

三、如何解决

打开APP中的配置文件查看request配置中的'csrfParam' => '_csrf-frontend',在视图中的隐藏input的name应该和csrfParam设置的值相同。

如果csrfParam设置的值为_csrf_frontend那么你的input隐藏标签需要这样写:

<input name="_csrf-frontend" type="hidden" value="<?= Yii::$app->request->csrfToken ?>"/>

Unable to verify your data submission.加入了_csrf也报400错误的解决的更多相关文章

  1. [Yii2]Unable to verify your data submission(你提交的资料无法被验证)

    Yii2中,使用form提交数据,会提示: [yii\web\HttpException:400] exception 'yii\web\BadRequestHttpException' with m ...

  2. Unable to verify your data submission错误解决

    如果不用Yii2提供的ActiveForm组件生成表单,而是自定义表单,那么当你提交表单的时候就会报这个错误 Unable to verify your data submission 这是因为Web ...

  3. Yii框架用ajax提交表单时候报错Bad Request (#400): Unable to verify your data submission.

    提交表单报400错误,提示 "您提交的数据无法验证"原来是csrf验证的问题,因为表单是自己写的,在Yii框架中,为了防止csrf攻击,对post的表单数据封装了CSRF令牌验证. ...

  4. YII2 在使用控制器调试微信接口时报错 Unable to verify your data submission

    出现这个原因,是因为提交数据时,被YII2的CSRF验证给拦截了. 只需要在当前控制器设置一个属性,关闭该验证就可以了. public $enableCsrfValidation = false;

  5. cosbench read异常解决办法。 Unable to verify integrity of data download. Client calculated content hash didn't match hash calculated by Amazon S3. The data may be corrupt.

    问题:cosbench read测试failed 报错如下 Cosbench v0.4.2.c4 against Ceph (Hammer) / radosgw / HAproxy's HTTP en ...

  6. [nodejs] Error: unable to verify the first certificate

    Error: unable to verify the first certificate Solution npm config set registry http://registry.npmjs ...

  7. Guzzle Unable to parse JSON data: JSON_ERROR_SYNTAX - Syntax error, malformed JSON

    项目更新到正式平台时,出现Guzzle(5.3) client get请求出现:Unable to parse JSON data: JSON_ERROR_SYNTAX - Syntax error, ...

  8. "Unable to get image data from canvas because the canvas has been tainted by cross-origin data"问题产生原因及解决办法

    一.问题描述: 在支持html5的浏览器中运行javascript脚本,脚本主要是操作网页上的标签canvas,出错的操作为, getImageData(img,……), chrome 下出错信息为: ...

  9. zookeeper提示Unable to read additional data from server sessionid 0x

    配置zookeeper集群,一开始配置了两台机器server.1和server.2. 配置参数,在zoo.cfg中指定了整个zookeeper集群的server编号.地址和端口: server.1=1 ...

随机推荐

  1. ROS Learning-010 beginner_Tutorials 编写简单的启动脚本文件(.launch 文件)

    ROS Indigo beginner_Tutorials-09 编写简单的启动脚本文件 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.0 ...

  2. [gist]Android SHA-1

    参考:http://stackoverflow.com/questions/5980658/how-to-sha1-hash-a-string-in-android 代码:

  3. Entity Framework Code-First(19):Seed Data

    Seed Database in Code-First: You can insert data into your database tables during the database initi ...

  4. mingw和libcurl

    想用curl来做rest的客户端.所以就研究下这方面东西. 1:安装mingw 为什么用mingw,小巧,必vs快,gcc了解的多一些, http://tdm-gcc.tdragon.net/down ...

  5. 正经学C#_委托

    以前不会,甚至连想去学都没想.啧啧啧,我是何等朽木啊. 我先不说其中理念,或者原理,咱就先说最简单的用法.怎么去使用委托. 委托 Delegate 使用委托,就要先定义一个委托.定义一个委托就要先声明 ...

  6. iOS工程师 - 简历

    基本信息 姓 名:张学友                  性 别:男 年 龄:28                      学 历:本科 毕业学校:广西师范大学       专 业:通信工程 手 ...

  7. 「BZOJ 1297」「SCOI 2009」迷路「矩阵乘法」

    题意 边权\(w \in [1, 9]\)的\(n\)个结点的有向图,图上从\(1\)到\(n\)长度为\(d\)的路径计数,\(n \leq 10\). 题解 如果边权为\(1\)很经典,设\(f[ ...

  8. beijing(数学题)

    beijing(数学题) 甲和乙随机进行2n+1场n胜球赛,赌球必须对每场球赛单独押注.由于小明是甲队的铁杆球迷,现在小明希望如果甲最终获胜,那么他获得\(2^{2n-1}\)元,否则乙队获胜,他失去 ...

  9. vue_cli下开发一个简单的模块权限系统之展现数据

    这个页面是用户列表:userList就是第二张截图中的data里面的userList vue中只要改变存放数据的载体就会实现页面改变,mounted的意思是页面加载时执行这里面的函数,我们需要在页面加 ...

  10. luogu2723 丑数

    提供一种单调队列做法(非正解) 显然每一个丑数能够由一个质数乘以另一个丑数得到 所以我们开k个单调递增队列,每次从这些队列顶部找到一个最小的元素把他捞出来,然后枚举所有质数,用这个元素乘以质数,放入相 ...