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

Adr*_*ore 14 authentication api rest restful-authentication

我即将在我们的网站上实现RESTful API(基于WCF数据服务,但这可能无关紧要).

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

在这种情况下,推荐的防止暴力攻击的方法是什么?

我正在考虑记录因错误凭据而被拒绝的失败请求,并在超过某个失败请求阈值后忽略来自同一IP的请求.这是标准方法,还是我缺少一些重要的东西?

cra*_*cot 9

由于NAT网关的数量,基于IP的阻塞本身就存在风险.

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

  • 嗯,您想如何将CAPTCHA放入RESTfull API?AFAIU所有客户都不应该是人类. (7认同)

tva*_*son 5

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

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

  • 这不是更容易对用户帐户发起 DOS 攻击吗?例如,我们网站的恶意竞争对手可能会通过发布错误密码故意锁定用户。他无法访问他们的帐户,但他会成功地使我们的网站看起来不可靠。这就是为什么我考虑基于 IP 的方法 - 攻击者必须欺骗真实用户的 IP 地址才能将他锁定。 (4认同)