2010-06-03 73 views
13

我即将实施RESTful API到我们的网站(基于WCF数据服务,但这可能没有关系)。您如何防止对RESTful数据服务的暴力攻击

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

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

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

回答

8

由于NAT网关数量众多,基于IP的阻塞本身具有风险。

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

+7

嗯,你想如何将CAPTCHA放入RESTfull API? AFAIU所有客户都不应该是人类。 – SergGr 2010-06-03 12:17:20

+0

好点,我必须眨眼RESTful位。棘手。 – crazyscot 2010-06-03 12:33:43

+0

captcha是我现在正在使用我的常规网站。但正如Iphone初学者指出的那样,这不是一个宁静的API的选择。然而,Tarpitting可能是一个好主意。 – 2010-06-03 16:21:05

3

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

这将有效限制任何暴力攻击,使合理密码的攻击不太可能成功。攻击者使用我上面的号码只能每1.25小时尝试3次(或5次或15次)。通过使用日志,您可以在同一天从同一个帐户查找多个锁定,从而发现这种攻击可能发生的时间。由于您的服务旨在供程序使用,因此访问该服务的程序的凭据设置正确后,除非发生攻击,否则它将永远不会遇到登录失败。这将是另一个迹象表明可能正在发生攻击。一旦您知道攻击正在进行中,您可以采取进一步措施,限制对违规IP的访问或涉及权威机构(如果适用),并停止攻击。

+2

难道这不会更容易在用户帐户上启动DOS攻击吗?例如,我们网站的恶意竞争者可能会故意通过发布错误的密码来锁定用户。他无法访问他们的帐户,但他会成功地使我们的网站看起来不可靠。这就是为什么我考虑基于IP的方法 - 攻击者必须欺骗真实用户的IP地址才能将其锁定。 – 2010-06-03 16:25:18

+0

@Adrian - 是的,但这是一个不同的问题。使用基于IP的方法来解决它可能会使您的服务实际上不可靠,因为用户可能忘记在密码更改后更新其脚本。在这种情况下,用户可以简单地等待,直到超时过去,然后再次尝试而不涉及到你。使用日志记录功能,您仍然能够检测到DOS攻击,并从恶意网站中放入一个IP块,并且在这种情况下,请确认当局。 – tvanfosson 2010-06-03 17:08:16