1 回答
TA贡献1836条经验 获得超5个赞
据我了解,服务器生成 CSRF 令牌是很常见的
服务器需要生成两个CSRF令牌
然后将其与已请求的视图(页面)一起发送到客户端(然后可以将令牌隐藏在 HTML 表单输入标记中)。
一个令牌通常作为 cookie 发送,另一个令牌可以作为 HTTP 标头发送。尽管可以通过这种方式发送,但不需要将其作为 HTML 表单输入标记(或正文的任何其他部分)发送到 HTML 正文内。
我的问题是;在哪里安全地存储服务器上生成的令牌?
您不必在服务器上存储令牌。你可以,但你不需要。
原计划是使用Redux来存储token
Redux 存储位于客户端的浏览器内存中。理论上,一个 React 组件(从服务器响应中提取第二个 CSRF 令牌)可以临时将令牌存储在存储中,以便另一个 React 组件可以从那里获取它并在发送到服务器之前将其放入下一个请求中。
显然 localStorage 也是一个坏主意......
是的
任何帮助、链接、建议、批评将不胜感激,我想学习构建考虑到安全性的应用程序
Links
With Express 使用这个中间件是很常见的。
批评
严格来说,这在 CSRF 相关 Q/A 的背景下是偏离主题的,但是......
UI 是用 React 构建的,运行在与服务器不同的端口上。
react-scripts
这暗示了使用which start的可能性webpack-dev-server
。它适合开发,但不适合生产中的部署。然而,这是一个单独的主题,向 Web 客户端提供 React 应用程序的构建工件(.html 文件、脚本包)与 CSRF 攻击及其缓解措施无关。
我想学习构建考虑安全性的应用程序
那么您可能会考虑使用一台网络服务器而不是两台(前端为 React 应用程序提供服务,后端为 API 响应提供服务)。使用一台服务器进行生产部署,不仅复杂性和成本更低,而且更安全,因为两台服务器具有更大的攻击面,并且使用一台服务器,您不需要通过使用 CORS 来削弱安全性。
添加回答
举报