Egg: 关于egg csrf-token

Created on 13 Mar 2017  ·  13Comments  ·  Source: eggjs/egg

  • Node Version:
  • Egg Version:
  • Plugin Name:
  • Plugin Version:
  • Platform:

我后端是egg(127.0.0.1:7001), 前端vue.js +axios(127.0.0.1:8080) , 是不在一个域上的

egg用了egg.cors 插件进行cors跨域

前端发送POST 请求 (设置了header{ 'x-csrf-token' : ??? })

??? 号处,填写的是在前端用js获取到名为’csrfToken‘ 的cookies

但是后端返回的提示 是invalid csrf token 错误,说明是传递的x-csrf-token是和服务器上的匹配不上的,

这个问题出在哪里呢? 是我获取到的cookies不对,还是服务器生成的csrfToken没办法返回到客户端?

Most helpful comment

来个完整的配置关掉 csrf (虽然不建议),文档中写的太含糊了,而且与现行的 config.default.js 有出处,建议尽快改改吧,还有 https://eggjs.org/zh-cn/core/security.html#安全威胁csrf的防范 在文档上也不能准确定位。。。

module.exports = appInfo => {
const config = {};

config.security = {
csrf: {
enable: false,
},
};

return config;
};

All 13 comments

@jtyjty99999 前端跟后端不在一个域上的,怎么获取到获取到后端的 csrf token 呢?

你前端能获取到这个 cookie 么?可以打印一下。

如果不在一个主域下肯定是拿不到 cookie 的,你这个场景关掉 csrf 吧。

@miaosun009 这个场景可以在后端把请求的路径ignore掉 https://github.com/eggjs/egg-security#match--ignore

@dead-horse 文档是没有注明怎么关闭csrf. 是在配置里面设置么?

@dead-horse
odule.exports = appInfo => {
const config = {
security: {
policy: {
enable: false,
},
domainWhiteList: ['http://localhost:8080']
},

这样不对吗? 为什么没办法观点csrf

@dead-horse 搞错了,不好意思

@dead-horse
建议在文档中区分一下 plugin.js 中针对插件的 enable 参数和 config.xxx.js 中的针对中间件的 enable 参数,可能有人不清楚结果导致将 match ignore 这样的配置写到了 plugin.js

来个完整的配置关掉 csrf (虽然不建议),文档中写的太含糊了,而且与现行的 config.default.js 有出处,建议尽快改改吧,还有 https://eggjs.org/zh-cn/core/security.html#安全威胁csrf的防范 在文档上也不能准确定位。。。

module.exports = appInfo => {
const config = {};

config.security = {
csrf: {
enable: false,
},
};

return config;
};

@ChasonTang @looneyren 欢迎来个PR

@looneyren 看了你的才改好。。感谢

@ChasonTang 欢迎提 PR 来优化下,这里之前就注意到了,但没有找到很好的办法,如果你注意看文档的话,发现我写的文档,每一段示例代码的第一行,就是标明了文件的地址,但有些同学没注意看,也没办法。

Was this page helpful?
0 / 5 - 0 ratings

Related issues

dizhifeng picture dizhifeng  ·  3Comments

xcstream picture xcstream  ·  3Comments

whlsxl picture whlsxl  ·  3Comments

bupafengyu picture bupafengyu  ·  3Comments

popomore picture popomore  ·  3Comments