2011-10-09 59 views
8

我正在考虑将OpenID作为我的PHP应用程序的登录方法,但有一件事阻止了我的继续:我如何保护OpenID使用者免遭滥用?如何保护OpenID消费者免受滥用?

An example of abusing OpenID by using a consumer as proxy

滥用包括洪水其他服务器与要求,用我的应用程序作为代理,通过一个大的下载网址为不必要的或通过做大量的请求减缓服务器。

我想我应该对做请求实行速率限制,但我该怎么做呢?可能的攻击者可以使用其他代理或TOR绕过IP检查。限制允许的提供者会违反OpenID的原则吗?

我不指望我的用户是邪恶的,但我想知道在添加另一个可能的攻击媒介之前需要考虑哪些事项。

重要的是,我将使用lightopenid作为PHP应用程序的后端。

回答

3

您需要将攻击分为两个池。 1)针对您自己的网站的攻击,以及2)针对使用您作为代理的其他人的攻击。这些问题都不是新的或独特的OpenID。例如,经典的“告诉朋友”电子邮件表单可以自动发送来自代理方的IP地址和电子邮件的垃圾邮件,从而防止垃圾邮件发送方的后果,并向他们提供(可能)干净的IP /电子邮件,而不是已被垃圾邮件保护标记。这主要是通过“CAPTCHA”来解决的,以防止自动使用表单。

对于攻击你自己的网站,这已被覆盖无数次。试试这里:protect your self against DOS attacks

对于攻击其他人的网站,许多相同的校长适用于其他问题中提到的。遏制身份验证请求,拒绝不合理或畸形的请求,验证Content-Length标题与POST后的实际内容,当然,您也可以随时添加经典的“CAPTCHA”以帮助防止使用您的OpenID使用者进行自动攻击。

同样在这里,我不会基于OpenID顶级域名进行限制,而是根据请求方的IP地址进行限制。是的,人们可以租用代理IP,但由于每个OpenID提供商的用户群差异很大,您无法基于顶级域名进行公平限制。您也可以从MaxMind这样的公司购买已知代理IP的数据库。如果用户来自代理IP,请增加您的限制的侵略性。

+0

客户端IP地址似乎是一件好事,可能使用C类部件来进一步降低滥用机会。 – Lekensteyn

0

按比例减缓请求的某个域的次数。

例如,假设某人试图通过请求像http://example.com/foohttp://example.com/barhttp://example.com/foobar120382很多网址,用你的DOS服务器example.com。考虑所有这些请求作为example.com的请求,并毫不拖延地执行第一个请求。下一个请求前2秒延迟,第三个请求前延迟4秒,第四个请求前延迟8秒,第五个请求前延迟8秒,依此类推。

这样的小延迟几乎不被人类用户所察觉,但会极大地降低您的服务器充当DOSsing代理的能力。只要认为第12个请求会被阻止超过一个小时(如果您使用两个幂)。

很明显,您还应该为常见的大型OpenID提供程序(如Google或myOpenID)创建某种白名单或灰名单。这些域名可能会经常被要求。

+0

延迟这种方式可能会DOS我自己的服务器,这是我试图避免的另一件事。 – Lekensteyn

+0

为什么?只需将这些请求放入一个异步队列中,可能需要像http://stackoverflow.com/questions/124462/asynchronous-php-calls。 – gioele

+0

这不起作用,因为我需要验证另一方的响应,这就是为什么请求首先发送。此外,它不能防止不答复的服务器(这需要较小的超时) – Lekensteyn

0

我会做些简单的事情。将OpenID端点限制为一组受信任端点:Google,wordpress,myopenid,yahoo。它可能会覆盖大部分用户,并且不会让漫游器让您的网站产生随机站点的流量。

+0

这对于私人应用程序来说很好,但这与OpenID的开放性质相违背。当机制被严重滥用时,尽管有一个允许访问公共服务的标志可能很有用。 – Lekensteyn

+0

好吧,对于非私人应用,它也可以。是的,它会违背开放性质,但实际上我认为很少有人在主要提供商之外使用openid – Bozho

相关问题