启用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 相关文章推荐
用文本文件实现的动态实时发布新闻的程序
Oct 09 PHP
第十三节--对象串行化
Nov 16 PHP
PHP中HTTP方式下的Gzip压缩传输方法举偶
Feb 15 PHP
PHP获取url的函数代码
Aug 02 PHP
如何获知PHP程序占用多少内存(memory_get_usage)
Sep 23 PHP
深入PHP操作MongoDB的技术总结
Jun 02 PHP
destoon后台网站设置变成空白的解决方法
Jun 21 PHP
smarty中post用法实例
Nov 28 PHP
4种PHP异步执行的常用方式
Dec 24 PHP
Symfony2框架学习笔记之表单用法详解
Mar 18 PHP
PHP实现可自定义样式的分页类
Mar 29 PHP
Linux下 php7安装redis的方法
Nov 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
PHP对接微信公众平台消息接口开发流程教程
2014/03/25 PHP
PHP针对字符串开头和结尾的判断方法
2016/07/11 PHP
PHP的Trait机制原理与用法分析
2019/10/18 PHP
推荐:极酷右键菜单
2006/11/29 Javascript
JAVASCRIPT keycode总结
2009/02/04 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/06 Javascript
一起来写段JS drag拖动代码
2010/12/09 Javascript
Jquery实现由下向上展开效果的例子
2014/12/08 Javascript
函数window.open实现关闭所有的子窗口
2015/08/03 Javascript
javascript函数式编程程序员的工具集
2015/10/11 Javascript
React.js入门学习第一篇
2016/03/30 Javascript
浅谈JS中的!=、== 、!==、===的用法和区别
2016/09/24 Javascript
Javascript 函数的四种调用模式
2016/11/05 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
在vue中使用Autoprefixed的方法
2018/07/27 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
2018/08/24 Javascript
jQuery简单实现根据日期计算星期几的方法
2019/01/09 jQuery
antd日期选择器禁止选择当天之前的时间操作
2020/10/29 Javascript
vue + el-form 实现的多层循环表单验证
2020/11/25 Vue.js
[00:20]TI9观赛名额抽取Ⅱ
2019/07/24 DOTA
python创建列表并给列表赋初始值的方法
2015/07/28 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
2017/08/21 Python
Python 函数基础知识汇总
2018/03/09 Python
python小程序实现刷票功能详解
2019/07/17 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
Python random模块制作简易的四位数验证码
2020/02/01 Python
Python @property及getter setter原理详解
2020/03/31 Python
基于Python pyecharts实现多种图例代码解析
2020/08/10 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
2020/08/17 Python
HTML5中视频音频的使用详解
2017/07/07 HTML / CSS
预备党员政审材料
2014/02/04 职场文书
《草原》教学反思
2014/02/15 职场文书
收款授权委托书
2014/10/02 职场文书
教师读书活动心得体会
2016/01/14 职场文书
解决python绘图使用subplots出现标题重叠的问题
2021/04/30 Python