CNode

egg.js中实现RESTfull api,vue请求post数据提示 missing csrf token

问答
Ggougou168发布于7 年前最后回复7 年前20 回复7402 浏览0 收藏

egg.js中实现RESTfull api,vue请求post数据提示 missing csrf token

2.png

查看回复

回复 (20)

Z
zuohuadong#1·7 年前

跨域

A
atian25#2·7 年前

请求的时候,需要把 cookie 里面的 CSRF 带到 headers 里面

C
cWatermelon#3·7 年前

建议先看文档, 可以把 csrf 保护关掉或者像楼上说的把csrf信息带到 token 中 安全威胁csrf的防范

A
abiuDoIT#5·7 年前
引用 atian25@abiuDoIT cors 是浏览器来裁定的,如果我直接写一个 node http request 是不受限制的

@atian25 是的,但是 csrf 攻击不就是只能在浏览器上才能发生的动作吗?

A
atian25#6·7 年前
引用 abiuDoIT@atian25 是的,但是 csrf 攻击不就是只能在浏览器上才能发生的动作吗?

@abiuDoIT 你可以理解为,不允许第三方直接请求 AJAX 接口,只允许我们自己的页面来发起。具体看对应文档吧

A
abiuDoIT#7·7 年前
引用 atian25@abiuDoIT 你可以理解为,不允许第三方直接请求 AJAX 接口,只允许我们自己的页面来发起。具体看对应文档吧

@atian25 我再重新描述下我的问题好了

  1. 同域情况下,禁止cors 的话,就禁止了所有来自其他页面的浏览器请求,那这样不就可以杜绝 csrf 攻击了吗?

2.不同域下,又不适合开启 csrf 防御. 那 csrf 防御什么场景开启合适呢?

A
abiuDoIT#9·7 年前
引用 atian25@abiuDoIT https://eggjs.app/zh cn/core/security.html 安全威胁 csrf 的防范

@atian25 😂😂🤦🏻‍♂️ 打扰大佬了,告辞.

(原来 禁止cors, 并不能禁止 form 表单的跨域请求,所以不能杜绝csrf 无感知攻击.)

G
GGBond1989#10·7 年前
G
gougou168#11·7 年前

谢谢各位大佬 解决了。 不是关闭csfr, 而是让api接口不开启csrf 希望帮到大家

  exports.security = {
    csrf: {
      // 判断是否需要 ignore 的方法,请求上下文 context 作为第一个参数
      ignore: ctx => {
        if (ctx.request.url == 'ctx.request.url == '/alipay/alipayNotify' || ctx.request.url == '/weixinpay/weixinpayNotify') {
          return true;
        }else if(ctx.request.url.indexOf('/api')!=-1){
           return true;
        }else{
          return false;
        }
      }
    },
    domainWhiteList: [ 'http://localhost:8080' ]
  };

A
atian25#12·7 年前

为什么要忽略了,这样就防不了 csrf 攻击了。

G
gougou168#13·7 年前
引用 atian25为什么要忽略了,这样就防不了 csrf 攻击了。

@atian25 前后端分离的项目,vue直接给服务器post数据 ,没法获取csrf,官方给的例子是服务器直接渲染的,然后ajax请求携带csrf。

不知道前后端分离的项目中有没有更好的方案。

现在后端用了 egg-cors 以及配置api接口不开启csrf验证

A
atian25#14·7 年前

嗯,不同域的话,那就关掉或忽略 csrf 即可。

H
Hcs66#16·7 年前

建议再加上jwt和接口权限校验~

A
abiuDoIT#17·7 年前
引用 atian25嗯,不同域的话,那就关掉或忽略 csrf 即可。

@atian25 不同域的话,那就关掉或忽略 csrf 即可。

但是同域情况下,服务端直接开启 <禁止跨域请求> 不就可以了吗? (请教下大佬,我这方面了解的不多) 如果这样 csrf 该在什么场景下用呢?

A
abiuDoIT#19·7 年前
引用 atian25@abiuDoIT 如何个『禁止跨域请求』法?

@atian25 cors 默认是禁止的,要开启才接受跨域请求 默认就是 『禁止跨域请求』的吧

A
atian25#20·7 年前
引用 abiuDoIT@atian25 cors 默认是禁止的,要开启才接受跨域请求 默认就是 『禁止跨域请求』的吧

@abiuDoIT cors 是浏览器来裁定的,如果我直接写一个 node http request 是不受限制的

参与回复
登录后即可参与回复。登录