目前我正在golang中开发一个GAE应用程序,允许用户使用Google的OpenID登录该服务。每个帐户显然都会映射到一个Google帐户。我是否应该为用户注册实现验证码,或者使用OpenID是否已经阻止服务进行机器人攻击?
答案 0 :(得分:3)
您是否接受任何 OpenID?然后这是不足够的保护。 任何人都可以在自己的域中建立一个OpenID网站,使用脚本创建十亿个帐户,并在您的网站上使用其中一个帐户登录。
您是否仅接受特定的 OpenID提供商?然后你没有使用OpenID,因为它本意使用(实际上,与创建它的原因明显相反)。但答案是:您是否相信OpenID提供商在创建帐户时已经完成了自己的尽职调查以防止垃圾邮件帐户?
无论如何,你可能会发现验证码是一个糟糕的解决方案,目前它的所有实现都被打破了(但这是一个完全不同的主题)。
答案 1 :(得分:1)
首先,对机器人攻击的恐惧确实初步谨慎。解析CSRF令牌(你应该使用它)并处理cookie会对攻击者造成足够的痛苦。我怀疑是否会有人自己设置自己的OpenID提供商,这是唯一能做到这一点的方式。
其次,App Engine的OpenID联合登录是用户API功能,而不是Go运行时功能 - 您可以使用任何OP(Facebook,Yahoo!,Steam ... Google)。用户API提供两种模式(可通过应用程序设置进行配置):OpenID联合登录和Google帐户登录。选择哪种模式取决于要求。如果您只需要用户的Google帐户,则最好使用后者,如果只是简单的无密码登录几乎所有内容,请选择OpenID。从应用程序的角度看,两者看起来完全相同。不过,最好的方法是OAuth。
回到这个问题,Google帐户API和OAuth几乎都不会发生此类攻击,而使用OpenID时,有点更简单。
https://developers.google.com/appengine/docs/go/users/overview