反应形式 CSRF 安全

Posted

技术标签:

【中文标题】反应形式 CSRF 安全【英文标题】:React form CSRF security 【发布时间】:2020-10-27 04:45:10 【问题描述】:

我的网站上有一个由 React 创建的联系表。它对公众开放,不需要人们登录。在我的网站中,我为那些需要人员登录的 API 端点实现了 JWT 令牌。使用这些 API 需要人们登录,我将在人们登录后获得一个令牌,然后在每个 API 请求中附加一个 JWT 令牌。但是,由于此表单对公众开放,不需要用户登录,因此我无法从登录中为 CSRF 附加令牌。如何确保表单请求安全?

【问题讨论】:

【参考方案1】:

首先你可能有兴趣在这里阅读类似的问题:https://security.stackexchange.com/questions/170388/do-i-need-csrf-token-if-im-using-bearer-jwt

长话短说:

CSRF 令牌(实际上是反 CSRF 令牌)旨在处理用户会话被保存在 cookie 中的问题。 Cookie 始终自动附加到您的浏览器发出的每个请求。这是一个问题,当您访问向您已登录的站点发出请求的恶意站点时。

如果您将具有自己逻辑的 JWT 令牌附加到每个单独的请求中,那么您就可以了,并且不需要额外的令牌来防止 CSRF。

【讨论】:

好吧,我的问题是向公众开放的表格,不需要登录。你说的不适合我的情况。 对不起,我好像误会了。如果端点是公共的,那你为什么要保护它免受 CSRF 的影响呢?有意义吗? 这是我的问题...如果我无法获得登录令牌,如何确保表单安全? 你不能。公共数据通常是不可变的,没有人在没有身份验证的情况下进行任何更改。如果事物是​​不可变的,则不需要 CSRF 保护。

以上是关于反应形式 CSRF 安全的主要内容,如果未能解决你的问题,请参考以下文章

具有多种形式的网页上的 CSRF 令牌?

_csrf 令牌在同一个 JSP 中的 2 种形式(CSRF 保护)

CSRF:我可以使用 cookie 吗?

带有 CSRF 令牌和会话的 Symfony 4 功能形式测试

执行CSRF令牌所有形式使用POST方法

Django CSRF错误是通过以多页形式访问页面来修复的吗?