我正在尝试更好地理解 Spring CSRF 保护的工作机制。假设我有一个站点 https://example.com/
,人们可以在其中对候选人进行投票。用户还可以交换消息。我还有一个用户登录,另一个用户向她发送一条消息,说要单击链接 https://example.com/vote/candiate/30
。
如果用户点击这个链接,浏览器会不会同时发送登录用户的 CSRF token 和 session ID,从而绕过 CSRF 保护检查?
最佳答案
链接通常不是 CSRF 问题的原因是 CSRF 仅在请求更改某些内容时才是问题。链接(GET 请求)不应更改任何内容。如果是这样,就像在您的示例中一样,我想它会向候选人投票,那么来自外部来源(不同网站)的任何链接也可以通过链接到该 url 来利用“正常”CSRF。
示例中的问题不是 Spring 中的 CSRF 保护不充分,问题是这种情况下的投票是 GET 请求,并且 GET 通常不会在设计上针对 CSRF 进行保护。解决方案是将投票请求更改为 POST,这样可以防止 CSRF(顺便说一句,这也将更加 RESTful)。
关于spring-boot - Spring CSRF保护场景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40874609/