代码之家  ›  专栏  ›  技术社区  ›  Adrian Grigore

如何防止对RESTful数据服务的暴力攻击

  •  13
  • Adrian Grigore  · 技术社区  · 15 年前

    我将要为我们的网站实现一个RESTfulAPI(基于WCF数据服务,但这可能无关紧要)。

    通过这个API提供的所有数据都属于我服务器的某些用户,所以我需要确保只有那些用户可以访问我的资源。因此,作为请求的一部分,必须使用登录/密码组合执行所有请求。

    在这种情况下,建议采用什么方法来防止暴力攻击?

    我正在考虑将由于错误凭据而被拒绝的失败请求记录到日志中,并在超过某个失败请求阈值后忽略来自同一IP的请求。这是标准方法,还是我遗漏了一些重要的东西?

    2 回复  |  直到 8 年前
        1
  •  9
  •   idmean    10 年前

    由于存在大量的NAT网关,基于IP的阻塞本身是有风险的。

    如果客户机快速发出过多请求,您可能会减慢(tar pit)速度;也就是说,在响应之前故意插入几秒钟的延迟。人类不太可能抱怨,但你已经放慢了机器人的速度。

        2
  •  3
  •   tvanfosson    15 年前

    我会使用与网站相同的方法。跟踪某个窗口中失败的登录尝试次数——比如在某个合理的时间跨度内允许3次(或者5次或15次),比如15分钟。如果超过阈值,则锁定帐户并标记发生锁定的时间。您也可以记录这个事件。在经过另一个合适的时间段后,比如说一个小时,解锁帐户(在下次尝试登录时)。成功登录会重置计数器和上次锁定时间。请注意,实际上您从未尝试在锁定帐户上登录,您只是返回登录失败。

    这将有效地限制任何暴力攻击的速率,使针对合理密码的攻击极不可能成功。一个攻击者,使用我上面的数字,每1.25小时只能尝试3次(或5次或15次)。使用您的日志,您可以通过在同一天从同一帐户中查找多个锁定来检测何时可能发生此类攻击。由于您的服务是由程序使用的,一旦访问服务的程序正确设置了其凭据,它将永远不会遇到登录失败,除非有正在进行的攻击。这将是另一个可能发生攻击的迹象。一旦你知道攻击正在进行中,那么你可以采取进一步的措施来限制对违规IP的访问,或者在适当的情况下让当局介入,并停止攻击。