MERN 堆栈中的 CSRF 实现

Posted

技术标签:

【中文标题】MERN 堆栈中的 CSRF 实现【英文标题】:CSRF implementation in a MERN stack 【发布时间】:2020-07-19 11:45:43 【问题描述】:

下面是我的 MERN 项目的文件结构。

|-Project
  |- client
  |- server

Client 文件夹包含一个反应服务器。 客户端运行在localhost.client.com 服务器文件夹包含 node.js 服务器的代码。 服务器运行在localhost.server.com

每当我从客户端向服务器发出请求时。如何减轻 csrf 攻击? 确保向服务器发出的请求来自客户端,而不是来自任何其他来源。

【问题讨论】:

【参考方案1】:

React frontend and REST API, CSRF 可能涵盖您的问题。

有一篇关于CSRF and counter measures 的优秀文章(考虑到 Angular,但仍然是同样的问题)。 TL/DR:

在需要时使用same-origin-policy 或设置Access-Control-Allow-Origin-header 将XSRF-Token 保存为安全cookie(不幸的是,这需要一个额外的请求——大多数时候)。只有您域中的代码才能访问此值。 将该令牌作为X-XSRF-TOKEN 标头值与您的请求一起发送以授权请求

为确保只有您的应用程序可以使用服务器 api,您可以在 CORS / OPTIONS 响应标头中设置 Access-Control-Allow-Origin 值。

在开发过程中通常设置为Access-Control-Allow-Origin: *

对于生产,您指定您的域/服务器名称Access-Control-Allow-Origin: localhost.client.com

为了防止欺骗来源,您可以使用 (Anti-)CSRF-Tokens。这是附加到您的请求的额外值,用于验证您的请求。 该值可以/应该保存在安全 cookie 中。 csurf 或 JSON Web Tokens 可能与您相关。在您的情况下,CSRF-Tokens 可能需要向您的 api 发出额外请求来查询令牌。

【讨论】:

但是域名可以很容易的改正。这不是缓解 csrf 攻击的完美解决方案 正确,CSRF-Tokens 可能是更好的解决方案。见***.com/questions/5207160/…

以上是关于MERN 堆栈中的 CSRF 实现的主要内容,如果未能解决你的问题,请参考以下文章

如何在 mern 堆栈中发布对特定数组字段的请求

mern 堆栈中的路由是如何处理的?

当同时使用 GraphQL 时,Nodejs 和 Express 在 MERN 堆栈 Web 应用程序中的作用是啥?

如何将数据附加到 MERN 堆栈中 mongodb 中的现有数组

保存带有中断的文本区域,MERN 堆栈

如何在 MERN 堆栈中发送响应模式?