关于Cross site Scripting Forgery

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

我正在使用csrf并使用spring 5. Spring 5自动为csrf提供支持,并在服务器端启用csrf保护我得到了

403: Invalid X-CSRF token

所以这意味着令牌需要来自前端?

我的理解是后端生成csrf令牌并作为响应发送到前端浏览器,然后它使用此令牌并将其作为cookie发送到后端服务器,然后后端将验证它。我的理解是正确的吗?

当手动为csrf生成隐藏令牌时,后端如何知道它是一个有效的csrf令牌?

第二种情况:假设有两个用户登录到我的网站,而前端正在将此令牌发送到后端,那么应用程序将如何区分哪个用户是哪个令牌?

另外请解释一下它在内部是如何工作的意味着我们在后端启用了csrf保护并在前端手动生成了一个令牌,然后在幕后做了什么?

考虑我的前端是JS页面

Spring 5是否有任何特性可以为每个用户注意会话并为每个用户自动验证令牌?我试过在官方网站上找到它,但没有把它拿到任何地方

spring spring-security csrf csrf-protection
1个回答
0
投票

嗨Zaib csrf令牌是从你说的后端生成的,一旦生成就会自动发送到前端,前端必须注意从模型中检索并重新发布每个“POST”请求。您可以通过不同的方式共享csrf令牌,主要是我使用header或html参数。

令牌与特定会话相关,因此如果您有一个已登录的用户,则不是很重要,即使未经过身份验证的用户也必须发送“POST”的csrf令牌。

csrf令牌通过放置在Spring安全性自身定义的过滤器链前面的过滤器进行验证,如果您在文档中搜索,则会有一个表格显示Spring安全性启用的每个“默认”过滤器的位置。此外,如果您在Spring上启用调试(</debug>在您的xml配置中已足够),您将打印处理http请求时使用的所有过滤器。因此,每次使用“POST”方法的请求都通过该过滤器时,它将检查参数中是否存在csrf标记或标头。

我从来没有用过cookie,所以如果特别需要它可能会有不同的情况,但它的工作原理并没有区别。

以下是关于Spring的csrf实现的详细信息:https://docs.spring.io/spring-security/site/docs/5.0.7.RELEASE/reference/htmlsingle/#csrf-configure

我说“POST”方法,但实际上检查了令牌的任何与状态变化相关的方法,你可以在这里参考doc:https://docs.spring.io/spring-security/site/docs/4.2.5.RELEASE/apidocs/org/springframework/security/web/csrf/CsrfFilter.html

希望这有助于澄清csrf令牌的用法。

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