node.js - MERN 堆栈中的 CSRF 实现
问题描述
下面是我的 MERN 项目的文件结构。
|-Project
|- client
|- server
客户端文件夹包含一个反应服务器。客户端在localhost.client.com
服务器文件夹中运行包含 node.js 服务器的代码。服务器运行在localhost.server.com
每当我从客户端向服务器发出请求时。如何减轻 csrf 攻击?确保向服务器发出的请求来自客户端,而不是来自任何其他来源。
解决方案
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 中。csurf或JSON Web Tokens可能与您相关。在您的情况下,CSRF-Tokens 可能需要向您的 api 发出额外请求来查询令牌。
推荐阅读
- python - Python中NumPy数组在一定范围内的最小值和最大值
- php - Laravel 中的 Swagger:为 Json 数据设置参数示例
- requirejs - 加载 typedarray 模块时出现“未捕获的 ReferenceError:未定义导出”
- matlab - 使用带有 for 循环的 syms 命令
- android - 使用 Gitlab 从 Firebase (APP Distribution) 下载 Android .apk,以运行 e2e 自动化测试
- c# - 卸载时如何删除 VSIX 的设置值
- javascript - 如何在地图上显示移动车辆实时位置的标记(Python-flask、HTML、JS、CSS、AJAX-jQuery、OpenStreetMap)
- python - Python如何一次迭代列表200个元素,直到我到达所有元素?
- php - 如何从特定于用户会话 ID 的多个表中检索列?
- mysql - 2个相同的sql请求,一长一短