启用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 相关文章推荐
SMARTY学习手记
Jan 04 PHP
Mysql的GROUP_CONCAT()函数使用方法
Mar 28 PHP
PHP Mysql编程之高级技巧
Aug 27 PHP
PHP 检查扩展库或函数是否可用的代码
Apr 06 PHP
PHP变量的定义、可变变量、变量引用、销毁方法
Dec 20 PHP
微信公众平台之快递查询功能用法实例
Apr 14 PHP
PHP邮箱验证示例教程
Jun 01 PHP
PHP通过微信跳转的Code参数获取用户的openid(关键代码)
Jul 06 PHP
Laravel接收前端ajax传来的数据的实例代码
Jul 20 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
Aug 04 PHP
PHP实现模拟http请求的方法分析
Dec 20 PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
Dec 05 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
帅气的琦玉老师
2020/03/02 日漫
php curl模拟post请求小实例
2013/11/13 PHP
php网站地图生成类示例
2014/01/13 PHP
php操作XML、读取数据和写入数据的实现代码
2014/08/15 PHP
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
ExtJS4中使用mixins实现多继承示例
2013/12/03 Javascript
javascript实现tab切换的四种方法
2015/11/05 Javascript
搞定immutable.js详细说明
2016/05/02 Javascript
bootstrap基础知识学习笔记
2016/11/02 Javascript
详解网站中图片日常使用以及优化手法
2017/01/09 Javascript
一文看懂如何简单实现节流函数和防抖函数
2019/09/05 Javascript
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
node 版本切换的实现
2020/02/02 Javascript
JavaScript内置对象之Array的使用小结
2020/05/12 Javascript
浅谈实现在线预览PDF的几种解决办法
2020/08/10 Javascript
用js实现放大镜效果
2020/10/28 Javascript
使用python编写批量卸载手机中安装的android应用脚本
2014/07/21 Python
python实现绘制树枝简单示例
2014/07/24 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
2017/11/03 Python
python GUI图形化编程wxpython的使用
2019/07/19 Python
python matplotlib库绘制散点图例题解析
2019/08/10 Python
Python K最近邻从原理到实现的方法
2019/08/15 Python
Python定义函数时参数有默认值问题解决
2019/12/19 Python
Python分析最近大火的网剧《隐秘的角落》
2020/07/02 Python
欧缇丽美国官网:Caudalie美国
2016/12/31 全球购物
医学院学生求职简历的自我评价
2013/10/24 职场文书
八一演出活动方案
2014/02/03 职场文书
领导干部廉政自律承诺书
2014/05/26 职场文书
工业设计专业自荐书
2014/06/05 职场文书
中学生旷课检讨书2篇
2014/10/09 职场文书
买房子个人收入证明
2014/10/12 职场文书
优秀英文求职信范文
2015/03/19 职场文书
Python Pandas 删除列操作
2022/03/16 Python
尝试使用Python爬取城市租房信息
2022/04/12 Python