启用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中使用excel的简单介绍
Aug 02 PHP
PHP的error_reporting错误级别变量对照表
Jul 08 PHP
分享下php5类中三种数据类型的区别
Jan 26 PHP
php实现中文字符截取防乱码方法汇总
Apr 29 PHP
php使用GD实现颜色渐变实例
Jun 02 PHP
编写PHP脚本来实现WordPress中评论分页的功能
Dec 10 PHP
php结合mysql与mysqli扩展处理事务的方法
Jun 29 PHP
PHP实现小偷程序实例
Oct 31 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
Nov 25 PHP
php 基础函数
Feb 10 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
TP5框架页面跳转样式操作示例
Apr 05 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/08/07 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
2012/08/31 PHP
ThinkPHP调用百度翻译类实现在线翻译
2014/06/26 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
2014/12/24 PHP
JavaScript 对Cookie 操作的封装小结
2009/12/31 Javascript
javascript 事件查询综合 推荐收藏
2010/03/10 Javascript
javascript中的delete使用详解
2013/04/11 Javascript
js判断背景图片是否加载成功使用img的width实现
2013/05/29 Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
2015/05/06 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
2015/12/02 Javascript
jQuery validate插件submitHandler提交导致死循环解决方法
2016/01/21 Javascript
jQuery判断是否存在滚动条的简单方法
2016/09/17 Javascript
jquery ajaxfileupload异步上传插件使用详解
2017/02/08 Javascript
canvas仿iwatch时钟效果
2017/03/06 Javascript
php 修改密码实现代码
2017/05/24 Javascript
mui框架移动开发初体验详解
2017/10/11 Javascript
浅谈webpack组织模块的原理
2018/03/10 Javascript
vue项目环境变量配置的实现方法
2018/10/12 Javascript
[01:23]2014DOTA2国际邀请赛 球迷无处不在Ti现场世界杯受关注
2014/07/10 DOTA
Python监控主机是否存活并以邮件报警
2015/09/22 Python
Python中的条件判断语句与循环语句用法小结
2016/03/21 Python
Django基础之Model操作步骤(介绍)
2017/05/27 Python
Python实现学校管理系统
2018/01/11 Python
浅谈Python脚本开头及导包注释自动添加方法
2018/10/27 Python
Django项目中添加ldap登陆认证功能的实现
2019/04/04 Python
纯css3实现的竖形无限级导航
2014/12/10 HTML / CSS
css3 transform导致子元素固定定位变成绝对定位的方法
2020/03/06 HTML / CSS
css3 中translate和transition的使用方法
2020/03/26 HTML / CSS
英国探险旅游专家:Explore
2018/12/20 全球购物
经销商会议欢迎词
2014/01/11 职场文书
机关党建工作汇报材料
2014/08/20 职场文书
参观邀请函范文
2015/02/02 职场文书
会计简历自我评价
2015/03/10 职场文书
离婚财产分割协议书
2015/08/11 职场文书
MySQL 可扩展设计的基本原则
2021/05/14 MySQL
MySQL提升大量数据查询效率的优化神器
2022/07/07 MySQL