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

时间:2010-06-03 12:08:32

标签: api authentication rest restful-authentication

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

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

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

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

2 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:3)

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

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