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 实现的主要内容,如果未能解决你的问题,请参考以下文章
当同时使用 GraphQL 时,Nodejs 和 Express 在 MERN 堆栈 Web 应用程序中的作用是啥?