【问题标题】:Is this CSRF Countermeasure Effective?这个 CSRF 对策有效吗?
【发布时间】:2011-10-16 19:17:17
【问题描述】:

请告诉我以下防止 CSRF 的方法是否有效。

  1. 生成令牌并保存在服务器上
  2. 通过 cookie 向客户端发送令牌
  3. 客户端上的 Javascript 在 POST 之前读取 cookie 并在表单中添加令牌
  4. 服务器将表单中的令牌与保存的令牌进行比较。

任何人都可以看到通过 cookie 发送令牌并使用 JavaScript 读取它而不是将其放入 HTML 中的任何漏洞吗?

【问题讨论】:

    标签: security web-applications csrf


    【解决方案1】:

    同步器令牌模式依赖于将客户端上已知的随机数据与表单中发布的数据进行比较。虽然您通常会在页面呈现时从填充了令牌的隐藏表单中获取后者,但我看不到使用 JavaScript 填充它的任何明显的攻击向量。攻击站点需要能够读取 cookie 以重建 post 请求,由于跨域 cookie 限制,它显然无法执行此操作。

    您可能会发现OWASP Top 10 for .NET developers part 5: Cross-Site Request Forgery (CSRF) 很有用(很多通用 CSRF 信息),尤其是关于跨域资源共享的部分。

    【讨论】:

      【解决方案2】:

      如果有人的流量被监控,黑客很可能也会获得令牌。但这听起来像是一个很棒的计划。我会尝试添加一个蜜罐。尝试将令牌伪装成其他东西,这样就不明显了。如果它被触发,将坏用户发送到蜜罐中,这样他们就不会知道自己已经被攻击了。

      我的安全理念很简单,最好用一个故事来说明。
      两个人正穿过树林。他们看到一只熊,吓坏了并开始奔跑。当熊追上他们并获得其中一个告诉另一个,“我们永远不会跑得比这只熊”。另一个人回答说:“我不必跑过熊,我只要跑过你!”

      您可以添加到您的网站以使其更安全的任何内容,您会变得更好。使用框架,验证所有输入(包括任何公共方法中的所有输入),你应该没问题。

      如果您存储敏感数据,我将设置第二个无法访问 Internet 的 sql 服务器。让您的后端服务器不断访问您的前端服务器,用虚假数据提取和替换敏感数据。如果您的前端服务器很可能需要该敏感数据,请使用一种特殊方法,该方法使用不同的数据库用户(具有访问权限)从后端服务器中提取数据。有人必须完全拥有你的机器才能解决这个问题......而且你应该能够拔掉插头仍然需要足够的时间。最有可能的是,他们会在意识到它是假的之前提取您的所有数据......哈哈。

      我希望我有一个很好的解决方案来更好地保护您的客户以避免 CSRF。但是你所拥有的看起来是一个很好的威慑力。

      【讨论】:

      • 这一切似乎需要大量的工作来制造一些混淆并避免实际解决问题。我也有一个故事:如果你不打算解决问题,至少不要努力解决它。您在这里超越熊的想法假设熊不在乎他抓住了谁。如果你是一家银行,而另一个人是一家新闻网站,我认为攻击者可能会继续追赶你,即使你的速度再快一点。
      【解决方案3】:

      This questionSecurity Stack Exchange 上有一些关于这个主题的有用讨论。

      我特别喜欢@AviD 的回答:

      Don't.
      -
      Most common frameworks have this protection already built in (ASP.NET, Struts, Ruby I think), or there are existing libraries that have already been vetted. (e.g. OWASP's CSRFGuard). 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多