启用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 is_file()和is_dir()用于遍历目录时用法注意事项
Mar 02 PHP
php数据结构与算法(PHP描述) 快速排序 quick sort
Jun 21 PHP
深入PHP中的HashTable结构详解
Jun 13 PHP
本地机apache配置基于域名的虚拟主机详解
Aug 10 PHP
浅谈php和.net的区别
Sep 28 PHP
php获取随机数组列表的方法
Nov 13 PHP
各种快递查询--Api接口
Apr 26 PHP
简述php环境搭建与配置
Dec 05 PHP
Symfony2针对输入时间进行查询的方法分析
Jun 28 PHP
PHP简单获取上月、本月、近15天、近30天的方法示例
Jul 03 PHP
Laravel框架控制器,视图及模型操作图文详解
Dec 04 PHP
Laravel5.1 框架控制器基础用法实例分析
Jan 04 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中array_merge与array+array的区别
2013/06/21 PHP
在PHP上显示JFreechart画的统计图方法
2013/11/03 PHP
Yii配置文件用法详解
2014/12/04 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
2015/05/11 PHP
6个超实用的PHP代码片段
2015/08/10 PHP
Thinkphp连表查询及数据导出方法示例
2016/10/15 PHP
Thinkphp框架+Layui实现图片/文件上传功能分析
2020/02/07 PHP
JavaScript 加号(+)运算符号
2009/12/06 Javascript
JavaScript实现GriwView单列全选(自写代码)
2013/05/13 Javascript
JQuery伸缩导航练习示例
2013/11/13 Javascript
jQuery1.9.1针对checkbox的调整方法(prop)
2014/05/01 Javascript
js实现模拟计算器退格键删除文字效果的方法
2015/05/07 Javascript
简单谈谈json跨域
2016/03/13 Javascript
Vue指令的钩子函数使用方法
2017/03/20 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
vue-awesome-swiper滑块插件使用方法详解
2017/11/27 Javascript
React BootStrap用户体验框架快速上手
2018/03/06 Javascript
JavaScript之实现一个简单的Vue示例
2019/01/17 Javascript
微信小程序wx.request拦截器使用详解
2019/07/09 Javascript
详解Python的hasattr() getattr() setattr() 函数使用方法
2018/07/09 Python
python代理工具mitmproxy使用指南
2019/07/04 Python
详解python uiautomator2 watcher的使用方法
2019/09/09 Python
Python对接支付宝支付自实现功能
2019/10/10 Python
python 实现有道翻译功能
2021/02/26 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
2021/03/04 Python
CSS3常用的几种颜色渐变模式总结
2016/11/18 HTML / CSS
canvas实现有递增动画的环形进度条的实现方法
2019/07/10 HTML / CSS
HTML5 Canvas实现360度全景图的示例代码
2018/01/29 HTML / CSS
HR喜欢的自荐信格式
2013/10/08 职场文书
函授本科自我鉴定
2013/11/03 职场文书
蛋糕店的商业计划书范文
2014/01/27 职场文书
2016年3月份红领巾广播稿
2015/12/21 职场文书
vue实现可拖拽的dialog弹框
2021/05/13 Vue.js
Python re.sub 反向引用的实现
2021/07/07 Python
深入理解Pytorch微调torchvision模型
2021/11/11 Python
python数字类型和占位符详情
2022/03/13 Python