响应 CSRF 安全性

问题描述 投票:0回答:2

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

reactjs security jwt token
2个回答
0
投票

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

长话短说:

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

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


0
投票

当有人访问 miliciouse 网站时,它会触发受害者计算机向您的网站发出请求。默认情况下,浏览器将所有令牌发送到各自的源,但 miliciouse 用户发送请求的详细信息,受害者计算机将令牌/cookie 附加到请求并将其发送,就好像它是实际用户一样。

考虑到这一点,您的问题取决于您如何处理表格。如果用户令牌/cookie 对于与表单链接很重要。假设发表博客文章的人需要 CSRF 保护。您不希望另一个 miliciouse 用户创建自定义博客帖子请求并使用实际用户令牌发送它,因此您可以使用表单手动附加链接到用户令牌/cookie 的 csrf 令牌。 CSRF 攻击只能自定义请求详细信息,例如 localhost:3000/user/blogpost/request。然而,csrf 攻击者在发送请求之前无法使用 javascript 将 csrf 令牌包含在请求中。因此,如果存在 csrf,则意味着它是实际用户。

由于您的表格是公开的。它告诉我任何人都可以在登录或未登录的情况下提交它。这意味着它与用户是谁无关。因此,即使确实发生了 CSRF 攻击,并且有人代表其他人发出表单提交请求。提交请求的人身份一开始并不重要。因此其他人可以使用 csrf 恶意提交表单,但不会影响受害者,因此无需保护它。

如果您的表单同时服务于公共用户和登录用户。对于公共身份并不重要,但对于记录的身份确实很重要。您必须在后端和前端处理它。在前端尝试查找并发送 csrf。如果用户未登录,即没有 csrf 令牌。然后发送一个未定义的变量。

在后端,如果有 csrf 令牌和 JWT 令牌/会话 ID,则验证表单提交,将其链接到用户,或者安全地执行任何您喜欢的操作,假设用户实际提交了它,因为 csrf 存在。如果后端收到请求时 csrf 不存在,但存在会话 id/token,则表明这是一个恶意请求,请忽略它或阻止 ip/帐户或由您决定。但如果请求没有 CSRF 并且没有 sessionid/token,那么这只是一个公共的、未登录的用户提交的。你可以随心所欲地处理它。

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.