启用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中的时间处理
Oct 09 PHP
人大复印资料处理程序_查询篇
Oct 09 PHP
excellent!――ASCII Art(由目标图象生成ascii)
Feb 20 PHP
PHP strtr() 函数使用说明
Nov 21 PHP
php实现斐波那契数列的简单写法
Jul 19 PHP
php微信公众平台开发类实例
Apr 01 PHP
php跨服务器访问方法小结
May 12 PHP
PHP7.0安装笔记整理
Aug 28 PHP
全新Mac配置PHP开发环境教程
Feb 03 PHP
php注册审核重点解析(数据访问)
May 23 PHP
PHP基于redis计数器类定义与用法示例
Feb 08 PHP
PHP预定义超全局数组变量小结
Aug 20 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
《斗罗大陆》六翼天使武魂最强,为什么老千家不是上三宗?
2020/03/02 国漫
PHP下判断网址是否有效的代码
2011/10/08 PHP
ThinkPHP实现动态包含文件的方法
2014/11/29 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
PHP7 echo和print语句实例用法
2019/02/15 PHP
laravel多条件查询方法(and,or嵌套查询)
2019/10/09 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
js 动态加载事件的几种方法总结
2013/12/25 Javascript
jQuery事件用法实例汇总
2014/08/29 Javascript
Javascript保存网页为图片借助于html2canvas库实现
2014/09/05 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
javascript中arguments,callee,caller详解
2016/03/16 Javascript
通过jquery实现页面的动画效果(实例代码)
2016/09/18 Javascript
简单几步实现返回顶部效果
2016/12/05 Javascript
浅析vue.js数组的变异方法
2018/06/30 Javascript
webpack4实现不同的导出类型
2019/04/09 Javascript
[03:07]2015国际邀请赛选手档案EHOME.rOtK 是什么让他落泪?
2015/07/31 DOTA
python list是否包含另一个list所有元素的实例
2018/05/04 Python
Python中一些不为人知的基础技巧总结
2018/05/19 Python
在SQLite-Python中实现返回、查询中文字段的方法
2019/07/17 Python
Python学习笔记之Django创建第一个数据库模型的方法
2019/08/07 Python
django数据模型on_delete, db_constraint的使用详解
2019/12/24 Python
Python select及selectors模块概念用法详解
2020/06/22 Python
python excel和yaml文件的读取封装
2021/01/12 Python
HTML5中的Web Notification桌面通知功能的实现方法
2019/07/29 HTML / CSS
英国第一的购买便宜玩具和游戏的在线购物网站:Bargain Max
2018/01/24 全球购物
Lovedrobe官网:英国领先的大码服装品牌
2019/09/19 全球购物
应届生服装设计自我评价
2013/09/20 职场文书
商务英语专业应届毕业生求职信
2013/10/28 职场文书
高中地理教学反思
2014/01/29 职场文书
2014年元旦促销活动方案
2014/02/22 职场文书
2015年大学社团工作总结
2015/04/09 职场文书
总结会主持词
2015/07/02 职场文书
建筑工程挂靠协议书
2016/03/23 职场文书
Python list列表删除元素的4种方法
2021/11/01 Python
Python&Matlab实现灰狼优化算法的示例代码
2022/03/21 Python