启用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编程语言开发动态WAP页面
Oct 09 PHP
3.从实例开始
Oct 09 PHP
php cookie 登录验证示例代码
Mar 16 PHP
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
Jul 31 PHP
php常用图片处理类
Mar 16 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
Nov 14 PHP
PHPCMS手机站伪静态设置详细教程
Feb 06 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
python进程与线程小结实例分析
Nov 11 PHP
PHP实时统计中文字数和区别
Feb 28 PHP
PHP数组array类常见操作示例
May 15 PHP
php使用自带dom扩展进行元素匹配的原理解析
May 29 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的pcntl多进程用法实例
2015/03/19 PHP
php获取访问者IP地址汇总
2015/04/24 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
2017/06/19 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
求解开jscript.encode代码的asp函数
2007/02/28 Javascript
jquery遍历input取得input的name
2009/04/27 Javascript
基于jQuery的合并表格中相同文本的相邻单元格的代码
2011/04/06 Javascript
js异常捕获方法介绍
2013/04/10 Javascript
jquery 层次选择器siblings与nextAll的区别介绍
2013/08/02 Javascript
JavaScript正则表达式匹配 div  style标签
2016/03/15 Javascript
原生JS实现在线问卷调查投票特效
2017/01/03 Javascript
jQuery:unbind方法的使用详解
2017/08/14 jQuery
vue 点击按钮增加一行的方法
2018/09/07 Javascript
vue使用websocket的方法实例分析
2019/06/22 Javascript
微信小程序开发常见问题及解决方案
2019/07/11 Javascript
javascript设计模式 ? 装饰模式原理与应用实例分析
2020/04/14 Javascript
vue输入框使用模糊搜索功能的实现代码
2020/05/26 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
[04:16]完美世界DOTA2联赛PWL S2 集锦第一期
2020/11/23 DOTA
Python 自动刷博客浏览量实例代码
2017/06/14 Python
Python字典实现简单的三级菜单(实例讲解)
2017/07/31 Python
python二维列表一维列表的互相转换实例
2018/07/02 Python
Python编程在flask中模拟进行Restful的CRUD操作
2018/12/28 Python
python dict 相同key 合并value的实例
2019/01/21 Python
OpenCV python sklearn随机超参数搜索的实现
2020/01/17 Python
python 读txt文件,按‘,’分割每行数据操作
2020/07/05 Python
英国鞋类及配饰零售商:Kurt Geiger
2017/02/04 全球购物
Sephora丝芙兰马来西亚官方网站:国际化妆品购物
2018/03/15 全球购物
C语言开发工程师测试题
2016/12/20 面试题
学徒工职责
2014/03/06 职场文书
软弱涣散基层党组织整改方案
2014/10/25 职场文书
首都博物馆观后感
2015/06/05 职场文书
Python图像处理之图像拼接
2021/04/28 Python
python字符串的一些常见实用操作
2022/04/06 Python
Python中Matplotlib的点、线形状、颜色以及绘制散点图
2022/04/07 Python
Vue OpenLayer测距功能的实现
2022/04/20 Vue.js