解决Yii2 启用_csrf验证后POST数据仍提示“您提交的数据无法验证”
一 CSRF 概念
CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
Yii2 中的CSRF配置
Yii2 默认是启用CSRF令牌验证
配置在main.php中:
'components' => [
'request' => [
// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
'enableCookieValidation' => true,
'cookieValidationKey' => 'cookvalid',
],
…………
若要取消CSRF验证有两种方法
1. 在要取消的控制器中添加:
public $enableCsrfValidation = false;
2. 在配置中取消enableCookieValidation的验证
'components' => [
'request' => [
// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
'enableCookieValidation' => false,
'cookieValidationKey' => 'cookvalid',
],
…………
二 启用CSRF的 POST验证
当启用了csrf后, 所有表单POST提交的数据就会进行验证,在表单中添加CSRF有两种方法
1. 使用Yii挂件生成html
这样会自动生成带有隐藏表单的_csrf
<?php
$form = ActiveForm::begin([
'id' => 'login-form',
]);
?>
<input type="hidden" name="jfinal_token" value="${jfinal_token }" />
<div class="form-group">
<label for="j_username" class="t">用户名:</label>
<?php echo Html::input('type', 'LoginForm[username]', $model->username, ['class' => 'form-control x319 in', 'placeholder' => 'Username', 'autocomplete' => 'off']); ?>
</div>
<div class="form-group"> <label for="j_password" class="t">密 码:</label>
<?php echo Html::input('password', 'LoginForm[password]', $model->password, ['class' => 'form-control x319 in', 'placeholder' => 'Password']); ?>
</div> <?php ActiveForm::end(); ?>
2. 手动添加_csrf
在form表单中手动添加隐藏表单,也适用于ajax的手动添加_csrf
<input type="hidden" value="<?php echo Yii::$app->request->csrfToken; ?>" name="_csrf" >
三 提交POST提示“您提交的数据无法验证”
使用原生or Yii挂件生成html带有_csrf 表单提交仍然提示“您提交的数据无法验证”
表单html如下:
<div class="login_form">
<form id="login-form" action="/default/login" method="post">
<input type="hidden" name="_csrf" value="bDV6RjFCS0RURzcwCAwKNC5AIyIDdy19BkAOF38YGSkLGCI2UgcEMQ==">
<div class="form-group">
<label for="j_username" class="t">用户名:</label>
<input type="type" class="form-control x319 in" name="LoginForm[username]" placeholder="Username" autocomplete="off">
</div>
<div class="form-group">
<label for="j_password" class="t">密 码:</label>
<input type="password" class="form-control x319 in" name="LoginForm[password]" placeholder="Password">
</div>
</form>
</div>

_csrf 是Yii自动生成,不存在字符串不匹配
后来找到问题:
render的时候使用了exit, 应使用return
*注: render 时也不能用echo 或 die()
解决办法:
return $this->render('action',['t'=>$t,'text'=>$text]);
封装render
return $this->display([
't' => $t,
'text' => $text,
]); /**
* render页面
* @param array 当$i为array模版为$this->action,数据源为$i
* 当$i为string,模版为$i,数据源为$param
*/
protected function display($i = array(), $param = array()) {
$data = array();
if (is_string($i)) {
$tpl = $i;
$data = $param;
} else {
$data = $i;
$tpl = $this->action->id;
} return $this->render(strtolower($tpl), $data);
}
解决Yii2给数据库表添加字段后对应模型无法识别到该属性的原因
数据库表的结构被缓存了
执行:
//清理所有表结构缓存数据
Yii::$app->db->getSchema()->refresh();
解决Yii2 启用_csrf验证后POST数据仍提示“您提交的数据无法验证”的更多相关文章
- Http协议详解,获取doPost,doGet提交的数据,以及编码问题
一 什么是Http协议 http协议: 浏览器客户端 和 服务器端 之间数据传输的格式规范 二 如何查看Http协议的内容 1)使用火狐的firebug插件(右键->firebug->网 ...
- 如何在 pyqt 中解决启用 DPI 缩放后 QIcon 模糊的问题
问题描述 如今显示器的分辨率越来越高,如果不启用 DPI 缩放,软件的字体和图标在高分屏下就会显得非常小,看得很累人.从 5.6 版本开始,Qt 便能支持 DPI 缩放功能,Qt6 开始这个功能是默认 ...
- yii2 数据导出 excel导出以及导出数据时列超过26列时解决办法
作者:白狼 出处:http://www.manks.top/article/yii2_excel_extension 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给 ...
- Yii2 关闭和打开csrf 验证 防止表单多次重复提交
原文地址:http://blog.csdn.net/terry_water/article/details/52221007 1.在Yii2配置中配置所有:所有的controller都将关闭csrf验 ...
- 解决Yii2中刷新网页时验证码不刷新的问题
解决Yii2中刷新网页时验证码不刷新的问题 [ 2.0 版本 ] ljfrocky 2015-05-30 19:39:00 1304次浏览 5条评论 10110 在Yii2框架中,如果在表单中使用 ...
- Yii 开发微信 '您提交的数据无法被验证'
使用Yii开发微信时,出现 [error][yii\web\HttpException:] exception 'yii\web\BadRequestHttpException' with messa ...
- jQuery form插件的使用--用 formData 参数校验表单,验证后提交(简单验证).
Form Plugin API 里提供了很多有用的方法可以让你轻松的处理表单里的数据和表单的提交过程. 测试环境:部署到Tomcat中的web项目. 一.引入依赖js <script src=& ...
- 金蝶KIS专业版替换SXS.dll 遭后门清空数据被修改为【恢复数据联系QQ 735330197,2251434429】解决方法 修复工具。
金蝶KIS专业版 替换SXS.dll 遭后门清空数据(凭证被改为:恢复数据联系QQ 735330197,2251434429)恢复解决方法. [客户名称]:山东青岛福隆发纺织品有限公司 [软件名称]: ...
- FPGA设计千兆以太网MAC(3)——数据缓存及位宽转换模块设计与验证
本文设计思想采用明德扬至简设计法.上一篇博文中定制了自定义MAC IP的结构,在用户侧需要位宽转换及数据缓存.本文以TX方向为例,设计并验证发送缓存模块.这里定义该模块可缓存4个最大长度数据包,用户根 ...
随机推荐
- 分享我的开源项目-springmore
之前有在博客园分享过springmore,不知道是什么原因,被管理员移除首页 在此郑重声明,这是我个人的开源项目,东西不多,也不存在打广告,也没有什么利益可图 完全是出于分享的目的,望博客园管理员予以 ...
- MySQL安装步骤
MySQL安装步骤 1. 下载MySQL Community Server 5.6.21,注意选择系统类型(32位/64位) 2. 解压MySQL压缩包 将以下载的MySQL压缩包解压到自定义目录下. ...
- SVN随记
SVN中提交代码时报如下错误 commit -m "sync" E:/resource/rad_workspace/IMSCrawl/src/configuration.prope ...
- java高新技术-基本数据类型拆装箱及享元设计模式
享元设计模式 public static void main(String[] args) { Integer iObj = 3; //自动装箱 System.out.println(iObj + 1 ...
- 【caffe】绘制网络结构图
@tags caffe 网络结构 可视化 当拿到一份网络定义文件net.prototxt,可以用工具画出网络结构.最快速的方法是使用在线工具netscope,粘贴内容后shift+回车就可以看结果了. ...
- java制作验证码
建立一个web工程
- BUAA_OVERWATCH第一次行动前战略部署
这太IMBA了! 需求调研问卷的反馈 #define A 调查问卷 A设计背景 随着各种新兴手游的兴起,以及各大直播间内Lying Man的火热,以及各种娱乐方式的发展,传统桌游很好地移植到app上的 ...
- ARCGIS常用几种本地数据AE初始化
1.Personal GDB 新建一个在E盘的名为test的mdb: IWorkspaceFactory workspaceFactory = new AccessWorkspaceFactoryCl ...
- github提交代码时,报permission denied publickey
在像github提交代码时,报permission denied publickey. 查找了一下,可能是因为github的key失效了. 按照以下步骤,重新生成key. ssh-keygen 一路默 ...
- 大熊君大话NodeJS之------(Url,QueryString,Path)模块
一,开篇分析 这篇文章把这三个模块拿来一起说,原因是它们各自的篇幅都不是很长,其次是它们之间存在着依赖关系,所以依次介绍并且实例分析.废话不多说了,请看下面文档: (1),"Url模块&qu ...