发送的http请求何时自带http头 x-csrf-token属性

weixin_38067813 2019-09-11 03:09:39
在yii中有时候发送请求会把x-csrf-token属性放入http头属性中,这种情况是什么条件造成的?能不能手动控制
...全文
1181 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38080819 2019-09-11
  • 打赏
  • 举报
回复
yii默认配置,可关闭。一般情况下不建议关闭。
weixin_38081987 2019-09-11
  • 打赏
  • 举报
回复
应该是不会自动带上 x-csrf-token 这个头信息的吧. 你遇到的过 带 和 不带 的情况, 都是一样的请求方式么? 都是自己手写的ajax? 而不是用的框架带的js库(比如 yii.activeForm.js)里面的方法发起的请求? 如果方便的话 请提供多一些信息.
weixin_38091211 2019-09-11
  • 打赏
  • 举报
回复
我也遇到这个这个情况,一个是没有表单的ajax 请求 不带X-CSRF-Token 另一个是有FORM的ajax 其实上我并没有用到FORM 页面上有FORM的自动给POST的请求头里面加上了X-CSRF-Token
weixin_38101261 2019-09-11
  • 打赏
  • 举报
回复
在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相关参数
weixin_38101820 2019-09-11
  • 打赏
  • 举报
回复
我也遇到了,ajax的headers里面自带x-csrf-token,不知道什么原因造成的,还是说现在的版本变了,自带了

435

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧