【问题标题】:How to protect an OpenID consumer against abuse?如何保护 OpenID 消费者免受滥用?
【发布时间】:2011-12-03 23:47:48
【问题描述】:

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

An example of abusing OpenID by using a consumer as proxy

滥用包括用请求淹没其他服务器、使用我的应用程序作为代理、将大量下载作为 URL 传递或通过执行大量请求而不必要地减慢服务器速度。

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

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

如果有关系,我将使用lightopenid 作为 PHP 应用程序的后端。

【问题讨论】:

    标签: openid denial-of-service


    【解决方案1】:

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

    对于针对您自己网站的攻击,这一切之前已经被报道过无数次。在这里试试:protect your self against DOS attacks

    对于针对他人网站的攻击,许多与其他问题中提到的相同的原则都适用。限制身份验证请求,拒绝不合理或格式错误的请求,根据 POST 回传的实际内容验证 Content-Length 标头,当然您始终可以添加经典的“CAPTCHA”以帮助防止使用 OpenID 消费者的自动攻击。

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

    【讨论】:

    • 客户端IP地址似乎是个好东西,可能使用C类部分进一步减少滥用机会。
    【解决方案2】:

    根据请求某个域的次数成比例地减慢请求速度。

    例如,假设有人试图通过请求http://example.com/foohttp://example.com/barhttp://example.com/foobar120382 等许多 URL 来使用您对服务器 example.com 进行 DOS 操作。将所有这些请求视为对example.com 的请求,并立即执行第一个请求。在发出下一个请求之前延迟 2 秒,在发出第三个请求之前延迟 4 秒,在发出第四个请求之前延迟 8 秒,在第五个之前延迟 16 秒,以此类推。

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

    显然,您还应该为常见的大型 OpenID 提供商(如 Google 或 myOpenID)创建某种白名单或灰名单。这些域可能会被非常频繁地请求。

    【讨论】:

    • 以这种方式延迟可能会 DOS 我自己的服务器,这是我试图避免的另一件事。
    • 为什么?只需将这些请求放在异步队列中,可能会使用 stackoverflow.com/questions/124462/asynchronous-php-calls 之类的东西。
    • 这行不通,因为我需要验证对方的响应,这就是首先发送请求的原因。此外,它不能防止不回复的服务器(需要更短的超时)
    • 我不明白。 1)你得到验证请求 2)你等待几秒钟 3)你做你想做的事(我想调用一些 lightopenid 函数)。为什么这会破坏任何东西?这就像拥有一个慢速服务器或一个慢速网络。
    • 我不需要找到规范的 URL 来连接吗? stackoverflow.com/q/353880/427545
    【解决方案3】:

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

    【讨论】:

    • 这对于私有应用程序来说很好,但这违反了 OpenID 的开放性。当该机制被严重滥用时,设置一个允许访问公共服务的标志可能很有用。
    • 好吧,对于非私人应用程序也可以。是的,这会违背开放性,但实际上我认为很少有人在主要提供商之外使用 openid
    猜你喜欢
    • 2022-01-21
    • 2023-02-01
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 2016-01-05
    • 2013-01-22
    • 2010-11-24
    • 1970-01-01
    相关资源
    最近更新 更多