<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. Easyui datebox单击文本框显示日期选择 eayui版本1.5.4.1

    Easyui默认是点击文本框后面的图标显示日期,体验很不好,所以我想单击文本框就显示日期选择框,网上很多版本是1.3,1.4的,于是自己就比葫芦画瓢改了一个1.5.4.1的版本. 我参考了网上这个帖子 ...

  2. 24-Fibonacci(dfs+剪枝)

    http://acm.hdu.edu.cn/showproblem.php?pid=5167 Fibonacci Time Limit: 2000/1000 MS (Java/Others)    M ...

  3. Boost中实现线程安全

    博客转载自: http://www.cnblogs.com/lvdongjie/p/4447142.html 1 boost原子变量和线程 #include <boost/thread.hpp& ...

  4. C语言-郝斌笔记-005菲波拉契序列

    菲波拉契序列 /* 菲波拉契序列 1 2 3 5 8 13 21 34 */ # include <stdio.h> int main(void) { int n; int f1, f2, ...

  5. p2421 荒岛野人

    传送门 题目 克里特岛以野人群居而著称.岛上有排列成环行的M个山洞.这些山洞顺时针编号为1,2,…,M.岛上住着N个野人,一开始依次住在山洞C1,C2,…,CN中,以后每年,第i个野人会沿顺时针向前走 ...

  6. Luogu 1450 [HAOI2008]硬币购物

    优美的dp + 容斥. 首先可以不用考虑数量限制,处理一个完全背包$f_{i}$表示用四种面值的硬币购买的方案数,对于每一个询问,我们考虑容斥. 我们的$f_{s}$其实多包含了$f_{s - c_{ ...

  7. jQuery 事件 - trigger() 方法

    <html> <head> <script type="text/javascript" src="/jquery/jquery.js&qu ...

  8. java全栈day11----构造方法 综合案例

    构造方法 在开发中经常需要在创建对象的同时明确对象的属性值,比如员工入职公司就要明确他的姓名.年龄等属性信息. 那么,创建对象就要明确属性值,那怎么解决呢?也就是在创建对象的时候就要做的事情,当使用n ...

  9. CodeForces 173B Chamber of Secrets (二分图+BFS)

    题意:给定上一个n*m的矩阵,你从(1,1)这个位置发出水平向的光,碰到#可以选择四个方向同时发光,或者直接穿过去, 问你用最少的#使得光能够到达 (n,m)并且方向水平向右. 析:很明显的一个最短路 ...

  10. php二维数组的某一字段 做分组统计

    $country=array_column($order,'country');$countryGP=array_count_values($country);对二维数组的某一字段 做分组统计