如何保护OpenID消费者免遭滥用?

时间:2011-10-09 14:36:52

标签: openid denial-of-service

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

An example of abusing OpenID by using a consumer as proxy

滥用包括使用我的应用程序作为代理充斥其他服务器请求,将大量下载作为URL传递或通过执行大量请求来不必要地降低服务器速度。

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

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

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

3 个答案:

答案 0 :(得分:3)

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

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

对于对其他人网站的攻击,许多相同的主体适用于其他问题中提到的。阻止身份验证请求,拒绝不合理或格式错误的请求,根据POST后的实际内容验证Content-Length标头,当然,您可以随时添加经典的“CAPTCHA”,以帮助防止使用您的OpenID使用者进行自动攻击。

与此处的其他建议相反,我不会基于OpenID TLD而是根据请求方的IP地址进行限制。是的,人们可以租用代理IP,但是由于每个OpenID提供商的用户群差别很大,因此无法根据TLD进行公平调整。您还可以从MaxMind等公司购买已知代理IP的数据库。如果用户来自代理IP,请增加限制的积极性。

答案 1 :(得分:0)

根据请求某个域的次数按比例减慢请求。

例如,假设某人通过请求许多网址(例如example.comhttp://example.com/foohttp://example.com/bar来尝试使用DOS来管理服务器http://example.com/foobar120382。将所有这些请求视为example.com的请求,并毫无延迟地执行第一个请求。在发出下一个请求之前延迟2秒,在发出第三个请求之前延迟4秒,在发出第四个请求之前延迟8秒,在第五个请求之前延迟16秒,依此类推。

人类用户几乎没有注意到这种小延迟,但会大大降低服务器充当DOSsing代理的能力。只要认为第12个请求将被阻止超过一个小时(如果你使用2的幂)。

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

答案 2 :(得分:0)

我会做一些更简单的事情。将OpenID端点限制为一组有限的可信端点:Google,wordpress,myopenid,yahoo。它可能会涵盖大多数用户,并且不会让机器人让您的网站为随机网站带来流量。