发送的http请求何时自带http头 x-csrf-token属性 [ 2.0 版本 ]
在yii中有时候发送请求会把x-csrf-token属性放入http头属性中,这种情况是什么条件造成的?能不能手动控制
YiiNewer 补充于 2017-04-26 13:39
11111
共 5 个回答
-
yii默认配置,可关闭。一般情况下不建议关闭。
共 3 条回复@YiiNewer 你确定是同一个ajax会出现一会儿有csrf,一会儿没有csrf?如果不是,请在没有csrf的ajax中补上csrf代码。 http://www.yiichina.com/tutorial/449
-
-
-
在yii1版本中并没有这个特性,yii.js中全局绑定了ajax的请求,并自动添加了一些属性比如:
function initCsrfHandler() { // automatically send CSRF token for all AJAX requests $.ajaxPrefilter(function (options, originalOptions, xhr) { if (!options.crossDomain && pub.getCsrfParam()) { xhr.setRequestHeader('X-CSRF-Token', pub.getCsrfToken()); } }); pub.refreshCsrfToken(); }
然后验证时,多了一个方法:
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); } }
即:$this->validateCsrfTokenInternal($this->getCsrfTokenFromHeader(), $trueToken);中的$this->getCsrfTokenFromHeader()
所以可以肯定的是,在框架内使用jquery的ajax可以不用带csrf相关参数
-
YiiNewer
注册时间:2014-10-12
最后登录:2018-07-18
在线时长:46小时16分
最后登录:2018-07-18
在线时长:46小时16分
- 粉丝13
- 金钱530
- 威望70
- 积分1690