启用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 checkbox 取值详细说明
Aug 19 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
Dec 29 PHP
Notice: Trying to get property of non-object problem(PHP)解决办法
Mar 11 PHP
如何使用Strace调试工具
Jun 03 PHP
ThinkPHP分页类使用详解
Mar 05 PHP
全新Mac配置PHP开发环境教程
Feb 03 PHP
Yii CGridView用法实例详解
Jul 12 PHP
微信第三方登录(原生)demo【必看篇】
May 26 PHP
PHP写API输出的时用echo的原因详解
Apr 28 PHP
PHP递归统计系统中代码行数
Sep 19 PHP
Laravel开启跨域请求的方法
Oct 13 PHP
php装饰者模式简单应用案例分析
Oct 23 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
Thinkphp搜索时首页分页和搜索页保持条件分页的方法
2014/12/05 PHP
Laravel 加载第三方类库的方法
2018/04/20 PHP
laravel利用中间件做防非法登录和权限控制示例
2019/10/21 PHP
Javascript面向对象之四 继承
2011/02/08 Javascript
重载toString实现JS HashMap分析
2011/03/13 Javascript
Jquery chosen动态设置值实例介绍
2013/08/08 Javascript
jquery $.fn $.fx是什么意思有什么用
2013/11/04 Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
2015/03/03 Javascript
SWFObject基本用法实例分析
2015/07/20 Javascript
jquery实现简单的轮换出现效果实例
2015/07/23 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
2015/11/30 Javascript
原生JS实现平滑回到顶部组件
2016/03/16 Javascript
jQuery使用正则表达式限制文本框只能输入数字
2016/06/18 Javascript
深入理解Node.js中通用基础设计模式
2017/09/19 Javascript
js点击时关闭该范围下拉菜单之外的菜单方法
2018/01/11 Javascript
Angular数据绑定机制原理
2018/04/17 Javascript
vue绑定事件后获取绑定事件中的this方法
2018/09/15 Javascript
浅谈React Event实现原理
2018/09/20 Javascript
小试SVG之新手小白入门教程
2019/01/08 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
VUE渲染后端返回含有script标签的html字符串示例
2019/10/28 Javascript
在vue中使用防抖和节流,防止重复点击或重复上拉加载实例
2019/11/13 Javascript
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
js实现轮播图特效
2020/05/28 Javascript
Python itertools模块详解
2015/05/09 Python
PyQt5每天必学之滑块控件QSlider
2018/04/20 Python
Django基础知识与基本应用入门教程
2018/07/20 Python
python实现AES加密与解密
2019/03/28 Python
pyqt5、qtdesigner安装和环境设置教程
2019/09/25 Python
修改Pandas的行或列的名字(重命名)
2019/12/18 Python
聊聊python中的循环遍历
2020/09/07 Python
Bogner美国官网:滑雪服中的”Dior”
2018/01/30 全球购物
表彰会主持词
2014/03/26 职场文书
行政上诉状范文
2015/05/23 职场文书
年会邀请函的格式及范文五篇
2019/11/02 职场文书
解析Java中的static关键字
2021/06/14 Java/Android