启用Csrf后POST数据时出现的400错误


Posted in PHP onJuly 05, 2015

最近一直出现这样的错误,一直在查找原因,偶然看到一篇解决的文章,分享给大家看看。

第一种解决办法是关闭Csrf

public function init(){
  $this->enableCsrfValidation = false;
}

第二种解决办法是在form表单中加入隐藏域

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

第三种解决办法是在AJAX中加入_csrf字段

var csrfToken = $('meta[name="csrf-token"]').attr("content");
$.ajax({
 type: 'POST',
 url: url,
 data: {_csrf:csrfToken},
 success: success,
 dataType: dataType
});

Yii这个匹配的过程和Yii::$app->request->csrfToken 这个值存储位置说明:

存储位置

protected function createCsrfCookie($token)
  {
    $options = $this->csrfCookie;
    $options['name'] = $this->csrfParam;
    $options['value'] = $token;
    return new Cookie($options);
  }

校验方法

public function validateCsrfToken($token = null)
  {
    $method = $this->getMethod();
    // only validate CSRF token on non-"safe" methods http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.1
    if (!$this->enableCsrfValidation || in_array($method, ['GET', 'HEAD', 'OPTIONS'], true)) {
      return true;
    }

    $trueToken = $this->loadCsrfToken();

    if ($token !== null) {
      return $this->validateCsrfTokenInternal($token, $trueToken);
    } else {
      return $this->validateCsrfTokenInternal($this->getBodyParam($this->csrfParam), $trueToken)
        || $this->validateCsrfTokenInternal($this->getCsrfTokenFromHeader(), $trueToken);
    }
  }

以上所述就是本文的全部内容了,希望大家能够喜欢。

PHP 相关文章推荐
PHP 判断变量类型实现代码
Oct 23 PHP
Windows下XDebug 手工配置与使用说明
Jul 11 PHP
PHP中创建空文件的代码[file_put_contents vs touch]
Jan 20 PHP
ajax php传递和接收变量实现思路及代码
Dec 19 PHP
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
Jun 24 PHP
PHP SESSION的增加、删除、修改、查看操作
Mar 20 PHP
PHP Try-catch 语句使用技巧
Feb 28 PHP
php数组分页实现方法
Apr 30 PHP
php  单例模式详细介绍及实现源码
Nov 05 PHP
thinkPHP5.0框架自动加载机制分析
Mar 18 PHP
Laravel如何创建服务器提供者实例代码
Apr 15 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
Jul 08 PHP
php超快高效率统计大文件行数
Jul 05 #PHP
PHP版QQ互联OAuth示例代码分享
Jul 05 #PHP
PHP 获取ip地址代码汇总
Jul 05 #PHP
PHP中$_SERVER使用说明
Jul 05 #PHP
php实现短信发送代码
Jul 05 #PHP
phpMyAdmin安装并配置允许空密码登录
Jul 04 #PHP
Ubuntu下安装PHP的mongodb扩展操作命令
Jul 04 #PHP
You might like
php生成WAP页面
2006/10/09 PHP
PHP与SQL注入攻击[二]
2007/04/17 PHP
PHP5中的时间相差8小时的解决办法
2008/03/28 PHP
php中获取指定IP的物理地址的代码(正则表达式)
2011/06/23 PHP
php中用memcached实现页面防刷新功能
2014/08/19 PHP
PHP互换两个变量值的方法(不用第三变量)
2016/11/14 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
2017/04/26 PHP
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
在Node.js应用中读写Redis数据库的简单方法
2015/06/30 Javascript
jQuery实现带有动画效果的回到顶部和底部代码
2015/11/04 Javascript
js仿微信语音播放实现思路
2016/12/12 Javascript
详解nodejs 文本操作模块-fs模块(五)
2016/12/23 NodeJs
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
2017/08/14 Javascript
微信小程序开发animation心跳动画效果
2017/08/16 Javascript
javascript修改浏览器title方法 JS动态修改浏览器标题
2017/11/30 Javascript
vue-router的使用方法及含参数的配置方法
2018/11/13 Javascript
微信小程序错误this.setData报错及解决过程
2019/09/18 Javascript
JavaScript 面向对象程序设计详解【类的创建、实例对象、构造函数、原型等】
2020/05/12 Javascript
小程序实现上传视频功能
2020/08/18 Javascript
小程序点餐界面添加购物车左右摆动动画
2020/09/23 Javascript
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
2015/05/02 Python
python简单线程和协程学习心得(分享)
2017/06/14 Python
Python 实现选择排序的算法步骤
2018/04/22 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
python获取array中指定元素的示例
2019/11/26 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
2020/04/08 Python
Bogner美国官网:滑雪服中的”Dior”
2018/01/30 全球购物
英语专业毕业生自荐信
2013/10/28 职场文书
求职面试个人自我评价
2014/02/28 职场文书
文案策划求职信
2014/03/18 职场文书
关于学习的演讲稿
2014/05/10 职场文书
紧急迫降观后感
2015/06/15 职场文书
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL
Python超详细分步解析随机漫步
2022/03/17 Python
TV动画「神渣☆爱豆」公开第一弹主视觉图
2022/03/21 日漫