如何在 NodeJS 中实现带有子域的 csrf

Posted

技术标签:

【中文标题】如何在 NodeJS 中实现带有子域的 csrf【英文标题】:How to implement csrf with subdomains in NodeJS 【发布时间】:2021-01-01 03:08:48 【问题描述】:
const csrfProtection = csrf( 
    cookie:  
      domain: '.' + config_web.domain,
      secure: true,
      httpOnly: true,
      //sameSite: 'none'
    , 
);

app.use(expresssession(
   store: new RedisStore( client: redisClient ),
   secret: 'keyboard cat',
   resave: false,
   saveUninitialized: false,
   cookie:  
     domain: '.' + config_web.domain, 
     maxAge: parseInt(cookiesTime), 
     secure: true, 
     httpOnly: true 
   
));

const corsOptions = 
  origin: ['https://api.domain.com', 'https://main.domain.com'],
  methods: 'POST',
  credentials: true,
  allowedHeaders: '*',//['Content-Type', 'Authorization', 'X-Requested-With'],
  optionsSuccessStatus: 200


app.use(cors(corsOptions));

我有主站点https://main.domain.com 并将通过https://api.domain.com 调用api。 分离两个子域后,从 csrf 调用 api 总是失败。我想知道我是否设置了错误的任何 cookie 内容?

【问题讨论】:

config_web.domain 的值是?我的意思是它看起来像什么?我猜是domin.com? 【参考方案1】:
$.ajax(
   url: a_cross_domain_url,
   xhrFields: 
      withCredentials: true
   
);

刚刚发现在前端添加 xhrFields 然后就可以了

【讨论】:

以上是关于如何在 NodeJS 中实现带有子域的 csrf的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 .htaccess 在 codeigniter 中实现动态子域?

在 Python REST API 中实现 CSRF 保护

如何使用 express.js 在 Ajax 调用中实现 CSRF 保护(寻找完整示例)?

线程池是如何工作的,以及如何在 NodeJS 之类的 async/await 环境中实现它?

如何在nodejs + postgresql中实现分页

如何在iOS swift中实现带有月份、日期和时间的自定义选择器?