启用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 相关文章推荐
将RTF格式的文件转成HTML并在网页中显示的代码
Oct 09 PHP
写出高质量的PHP程序
Feb 04 PHP
解析php mysql 事务处理回滚操作(附实例)
Aug 05 PHP
WordPress中创建用户角色的相关PHP函数使用详解
Dec 25 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
Mar 21 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
Jul 20 PHP
基于PHP微信红包的算法探讨
Jul 21 PHP
使用PHPStorm+XDebug搭建单步调试环境
Nov 19 PHP
php提取微信账单的有效信息
Oct 01 PHP
实例说明js脚本语言和php脚本语言的区别
Apr 04 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
Oct 18 PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
Dec 02 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实现的仿阿里巴巴实现同类产品翻页
2009/12/11 PHP
PHP中break及continue两个流程控制指令区别分析
2011/04/18 PHP
PHP错误Warning:mysql_query()解决方法
2015/10/24 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
2016/04/07 PHP
php 7新特性之类型申明详解
2017/06/06 PHP
根据分辨率不同,调用不同的css文件
2006/07/07 Javascript
js表数据排序 sort table data
2009/02/18 Javascript
javascript div 弹出可拖动窗口
2009/02/26 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
JS验证邮件地址格式方法小结
2015/12/01 Javascript
node.js cookie-parser 中间件介绍
2016/06/06 Javascript
JavaScript cookie详解及简单实例应用
2016/12/31 Javascript
javascript正则表达式模糊匹配IP地址功能示例
2017/01/06 Javascript
ajax 提交数据到后台jsp页面及页面跳转问题
2017/01/19 Javascript
JS中传递参数的几种不同方法比较
2017/01/20 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
2019/01/21 Javascript
layui table 表格上添加日期控件的两种方法
2019/09/28 Javascript
node.js express框架实现文件上传与下载功能实例详解
2019/10/15 Javascript
Node.js创建一个Express服务的方法详解
2020/01/06 Javascript
微信小程序仿通讯录功能
2020/04/09 Javascript
[04:00]黄浦江畔,再会英雄——完美世界DOTA2 TI9应援视频
2019/07/31 DOTA
用Python登录Gmail并发送Gmail邮件的教程
2015/04/17 Python
PyQt5每天必学之弹出消息框
2018/04/19 Python
解析Python的缩进规则的使用
2019/01/16 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
2019/06/19 Python
Python验证码截取识别代码实例
2020/05/16 Python
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
AmazeUI框架搭建的方法步骤(图文)
2020/08/17 HTML / CSS
施工资料员的岗位职责
2013/12/22 职场文书
合作投资意向书
2014/04/01 职场文书
标准的毕业生自荐信
2014/04/20 职场文书
护士找工作求职信
2014/07/02 职场文书
婚内房产协议书范本
2014/10/02 职场文书
学雷锋日活动总结
2015/02/06 职场文书
农民工工资支付承诺书
2015/05/04 职场文书
大学军训口号大全
2015/12/24 职场文书