【问题标题】:Spring CSRF protection scenario?Spring CSRF 保护场景?
【发布时间】:2017-04-13 23:08:34
【问题描述】:

我试图更好地理解 Spring CSRF 保护的工作机制。假设我有一个网站https://example.com/,人们可以在该网站上对候选人进行投票。用户还可以交换消息。我也有一个用户登录,另一个用户向她发送消息说点击链接https://example.com/vote/candiate/30

如果用户点击此链接,浏览器不会同时发送 CSRF 令牌和登录用户的会话 ID,从而绕过 CSRF 保护检查吗?

【问题讨论】:

    标签: spring-boot http security spring-security csrf


    【解决方案1】:

    链接通常在 CSRF 方面不是问题的原因是 CSRF 仅在请求更改某些内容时才会出现问题。链接(GET 请求)不应更改任何内容。如果确实如此,就像在您的示例中那样,它会向我想的候选人添加投票,那么来自外部来源(不同网站)的任何链接也可以通过链接到该 url 来利用“正常”CSRF。

    示例中的问题不在于 Spring 中的 CSRF 保护不足,问题在于这种情况下的投票是一个 GET 请求,而 GET 通常没有设计上针对 CSRF 的保护。解决方案是将投票请求更改为 POST,然后保护它免受 CSRF 的影响(顺便说一句,这也将更加 RESTful)。

    【讨论】:

    • 假设 spring 控制器实现了一个端点,该端点接受 example.com/vote/candiate/30 样式 URL 的 post 请求。这个 URL 会受到 CSRF 保护吗?
    • 好的 - 我想我现在明白了。当有人点击一个链接时,浏览器总是会发出一个get请求,只要我不实现一个使用get请求更新状态的控制器端点,一切都会好起来的。
    【解决方案2】:

    主要思想: 提交请求时,服务器会收到特殊的 cookie 并等待此 cookie 中定义的值。如果此值不同,则请求应该失败。 因此,如果服务返回用于在账户之间转移资金的表单,该表单包含参数,该参数预计在提交表单时接收,并且如果在没有此参数的情况下发送数据,则不会处理请求

    【讨论】:

      猜你喜欢
      • 2016-01-12
      • 2016-11-12
      • 2016-09-01
      • 1970-01-01
      • 2014-12-17
      • 2021-12-24
      • 2014-02-09
      • 2014-03-14
      相关资源
      最近更新 更多