启用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&amp;java(二)
Oct 09 PHP
PHP的中问验证码
Nov 25 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
May 08 PHP
php简单实现发送带附件的邮件
Jun 10 PHP
thinkphp中字符截取函数msubstr()用法分析
Jan 09 PHP
Yii开启片段缓存的方法
Mar 28 PHP
Yii2框架dropDownList下拉菜单用法实例分析
Jul 18 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
Dec 10 PHP
Laravel构建即时应用的一种实现方法详解
Aug 31 PHP
PHP 计算两个特别大的整数实例代码
May 07 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
Jun 19 PHP
PHP实现微信申请退款功能
Oct 01 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
仿Aspnetpager的一个PHP分页类代码 附源码下载
2012/10/08 PHP
解析thinkphp中的导入文件标签
2013/06/20 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
2014/10/15 PHP
php给数组赋值的实例方法
2019/09/26 PHP
在Laravel中实现使用AJAX动态刷新部分页面
2019/10/15 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
PHP数组访问常用方法解析
2020/09/05 PHP
JavaScript加密解密7种方法总结分析
2007/10/07 Javascript
javascript不同页面传值的改进版
2008/09/30 Javascript
用函数模板,写一个简单高效的 JSON 查询器的方法介绍
2013/04/17 Javascript
Json和Jsonp理论实例代码详解
2013/11/15 Javascript
Web表单提交之disabled问题js解决方法
2015/01/13 Javascript
sencha ext js 6 快速入门(必看)
2016/06/01 Javascript
浅谈jQuery中Ajax事件beforesend及各参数含义
2016/12/03 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
详解react阻止无效重渲染的多种方式
2018/12/11 Javascript
JS页面获取 session 值,作用域和闭包学习笔记
2019/10/16 Javascript
NodeJS实现一个聊天室功能
2019/11/25 NodeJs
jquery实现垂直手风琴导航栏
2020/02/18 jQuery
详解JavaScript的this指向和绑定
2020/09/08 Javascript
vue实现验证用户名是否可用
2021/01/20 Vue.js
python实现爬虫下载漫画示例
2014/02/16 Python
python基础教程之对象和类的实际运用
2014/08/29 Python
Python中Continue语句的用法的举例详解
2015/05/14 Python
django实现前后台交互实例
2017/08/07 Python
python多线程socket编程之多客户端接入
2017/09/12 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
2020/11/22 Python
python自动生成证件号的方法示例
2021/01/14 Python
一个C/C++编程面试题
2013/11/10 面试题
监理员的岗位职责
2013/11/13 职场文书
招商专员岗位职责
2014/02/08 职场文书
市场营销管理毕业生自荐信
2014/03/03 职场文书
中学校庆方案
2014/03/17 职场文书
大学运动会加油稿200字(5篇)
2014/09/27 职场文书
县级领导干部开展党的群众路线教育实践活动工作汇报
2014/10/25 职场文书
对讲机的最大通讯距离是多少
2022/02/18 无线电