【问题标题】:How to make Web Api secure against CSRF attacks in ASP.NET?如何使 Web Api 免受 ASP.NET 中的 CSRF 攻击?
【发布时间】:2017-08-16 15:07:54
【问题描述】:

考虑一个仅包含 HTML 和 JS 前端的 Web 应用程序,并与 Web API 进行通信。

我正在努力保护我的应用程序免受 CSRF 攻击,为此我参考了this article

使用本文中的方法,我能够生成 Anti CSRF 令牌并将其传递给客户端。但是,这取决于在进行常规 CRUD 操作调用之前必须发生的第一个 AJAX 调用。

使用这种方法,我需要澄清一些事情以及一些替代方案(如果有的话)。考虑一个客户端访问这个 Web 应用程序(由基于 AJAX 的 Anti CSRF 令牌保护),并保持他的会话打开,他访问一个恶意网站,该网站包含进行相同 AJAX 调用以获取 CSRF 令牌的页面(假设攻击者知道这个过程),我想他可以使用标头进行意外调用,从而导致攻击。

那么我怎样才能保护我的应用程序免受这些影响呢?

请提供有关此的更多详细信息,或者如果它具有误导性,请通过提供正确的详细信息来帮助我,以便我可以更好地解决它。

【问题讨论】:

    标签: ajax asp.net-web-api csrf csrf-protection


    【解决方案1】:

    首先,您应该使用与服务器的加密通信,这样攻击者就无法读取任何标头数据。

    如果您的攻击者使用与您相同的调用,他将无法猜测您在调用中使用的反 XSRF 令牌。每次调用 API 都会生成一个新令牌。我希望这个页面可以帮助你了解一些细节:

    https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet

    【讨论】:

    • 好吧,但是让我们假设攻击者是应用程序的受信任用户,并且他怀着恶意试图诱骗另一个用户完成某些事情,在这种情况下,加密通信可能会失败,除非我弄错了。此外,由于包含获取令牌的 js 代码的 html 页面将利用这一点,它可以生成令牌并进行进一步的调用,我猜。
    • 所以您的用户已登录。他获得了一个通过 ajax 调用操作数据的表单,并且该表单带有一个反 CRSF 令牌,女巫不过是一个唯一的数字值。因此,他发送表单,您的 API 检查令牌是否对该用户有效。通信是加密的,因此攻击者无法截获消息并操纵数据。澄清一下:link 是的,攻击者仍然可以劫持会话,但他无法猜测您用户的令牌
    • 我并不是说用户将能够从其他有效用户的响应中窃取 csrf 令牌。我想说的是,即使是攻击者也是应用程序的有效用户,他正试图欺骗其他有效用户在他不知情的情况下做某事,为此他需要 csrf 令牌,因为他可以直接从 ajax 调用中获取这些令牌'GetToken',他只需将这些添加到 cookie 和标头中,他的恶意行为将代表被欺骗的用户进行验证。那么有没有办法阻止此类攻击?
    • 我真的很抱歉,但即使在第三次阅读之后我也没有明白你的意思。如果 ha 可以登录到您的应用程序,是的,他可以请求令牌并发送有效请求。但是,如果您让攻击者成为授权用户,那么问题是另一个问题,与反 CSRF 令牌无关。
    • 并不是我让攻击者成为授权用户。相反,一个有效用户决定代表其他有效用户进行 CSRF 攻击。
    【解决方案2】:

    我认为如果我们使用基于令牌的身份验证,客户端必须在每个请求中传递身份验证令牌。如果客户端不将其存储在浏览器缓存中并将其存储在 localStorage 中,则浏览器将不会在调用中自动发送令牌。如果我们的服务收到任何没有身份验证令牌的请求,那么它将丢弃该请求。

    【讨论】:

      猜你喜欢
      • 2015-12-22
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 2019-09-08
      • 2018-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多