0

目前我正在用 golang 开发一个 GAE 应用程序,它允许用户使用来自 Google 的 OpenID 登录服务。显然,每个帐户都会映射到一个 Google 帐户。我应该为用户注册实施验证码,还是使用 OpenID 已经可以防止服务受到机器人攻击?

4

2 回答 2

3

你接受任何OpenID 吗?那么这是不够的保护。任何人都可以在自己的域上建立一个 OpenID 站点,使用脚本创建十亿个帐户,并在您的站点上使用其中一个帐户登录。

您是否只接受特定的OpenID 提供者?那么你就没有使用 OpenID,因为它本来就是要使用的(事实上,这与它的创建原因正好相反)。但答案将是:您是否相信 OpenID 提供商在创建帐户时已进行了尽职调查以防止垃圾邮件帐户?

无论如何,您可能会发现验证码是一个糟糕的解决方案,并且目前它的所有实现都被破坏了(但这是一个完全不同的话题)。

于 2012-05-07T21:54:05.723 回答
1

首先,对机器人攻击的恐惧确实是一个初步的警告。解析 CSRF 令牌(无论如何都应该使用)和处理 cookie 已经给攻击者带来了足够的痛苦。我怀疑有人会费心去建立自己的 OpenID 提供程序,这是唯一可以做到这一点的方法。

其次,App Engine 的 OpenID 联合登录是用户 API 功能,而不是 Go 运行时的功能——您可以使用任何 OP(Facebook、Yahoo!、Steam...Google)。User API 提供两种模式(可通过应用程序设置进行配置):OpenID 联合登录和 Google 帐户登录。选择哪种模式取决于要求。如果您只需要用户的 Google 帐户,您最好使用后者,如果它是简单的无密码登录,几乎所有内容,请选择 OpenID。从应用程序的角度来看,两者看起来相同。不过,最好的方法是 OAuth。

回到这个问题,Google Accounts API 和 OAuth 都将使此类攻击几乎不可能发生,而使用 OpenID 则更简单一些

https://developers.google.com/appengine/docs/go/users/overview

于 2012-05-09T17:45:09.797 回答