首页 > 解决方案 > MERN 堆栈中的 CSRF 实现

问题描述

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

|-Project
  |- client
  |- server

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

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

标签: node.jscsrfreactjs

解决方案


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

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

  • 需要时使用同源策略或设置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 中。csurfJSON Web Tokens可能与您相关。在您的情况下,CSRF-Tokens 可能需要向您的 api 发出额外请求来查询令牌。


推荐阅读