我正在考虑使用OpenID作为我的PHP应用程序的登录方法,但是有一件事阻止我继续:我如何保护OpenID消费者免受滥用?
An example of abusing OpenID by using a consumer as proxy
滥用包括使用我的应用程序作为代理充斥其他服务器请求,将大量下载作为URL传递或通过执行大量请求来不必要地降低服务器速度。
我想我应该在执行请求时实施速率限制,但我该怎么做呢?可能的攻击者可以使用其他代理或TOR来绕过IP检查。限制允许的提供者会违反OpenID的原则吗?
我不希望我的用户是邪恶的,但我想知道在添加另一个可能的攻击媒介之前我需要考虑哪些事情。
如果重要,我将使用lightopenid作为PHP应用程序的后端。
答案 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.com
,http://example.com/foo
,http://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。它可能会涵盖大多数用户,并且不会让机器人让您的网站为随机网站带来流量。