4

我正在寻找一种解决方案来检测在我的网站上创建许多帐户的作弊者。

我找到了永久的跨浏览器 cookie:http ://samy.pl/evercookie/ 但它是用 JS 编写的,我需要在 rails 控制器中使用一些东西。有没有像evercookie这样的gem或插件?

4

4 回答 4

3

一旦我为 Rails 搜索 Evercookie 解决方案,没有找到并写了一个 gem 'evercookie'。你可以试试。文档在github上可用

于 2013-05-29T13:54:16.073 回答
3

电子邮件令牌(设计,巫术)

您可以向新用户发送电子邮件吗?

许多网站使用的一个简单解决方案是向用户发送带有安全令牌的电子邮件。一个很好的 Rails gem 是 Devise,另一个是 Sorcery,它可以很容易地构建你自己的自定义身份验证。

第三方登录(OmniAuth、OpenId、Facebook Connect、Twitter 等)

您可以使用第三方服务对用户进行身份验证吗?

OmniAuth gem 可以连接到许多第三方服务,并允许用户使用 Google、Yahoo、Facebook、Twitter、LinkedIn 上的现有帐户以及包括 LDAP 和 Shibboleth 在内的开放服务进行身份验证。

OpenId gem 可以很好地与 Google、Yahoo 和许多其他大型提供商配合使用;您还可以在 OmniAuth 中使用 OpenId。

在所有这些情况下,您都会跟踪发送情况,这样用户就不会使用相同的电话号码、邮政地址、信用卡等太快地再次申请。

电话留言 (Twilio)

你可以给你的用户发短信吗?

Twilio gem 可以向电话号码发送短信。这个概念是您的应用程序向他们发送带有验证码的短信。

蜗牛邮件(邮寄方式)

postalmethods gem 可让您在邮政邮件中发送真实的实物明信片。您可以发送带有验证码的明信片。这可能需要几天的时间,因此一些网站将其与新用户的“试用期”结合使用,在这种情况下,他们在某种程度上被沙盒化,不会造成任何麻烦。(例如,他们可以阅读信息,但不能发布信息)。

信用卡(BrainTree)

相关的想法是让用户向您发送需要信用卡的东西,例如使用支付网关,如 BrainTree 或 ActiveMerchant。

您可以验证该卡是否开放且有效,而无需向其收取任何费用。或者,您可能需要最低限度的付款,例如要求用户通过 PayPal、Google Payments、Amazon Dev Pay 等向您发送一美元。

信用卡号码具有内部结构(如校验和),因此您可以验证该号码的格式和校验和是否正确。一个简单的脚本是flame.org

图片验证码(recaptcha)

为了阻止机器人,Ruby recaptcha 等验证码非常有效。

Ruby 有其他验证码解决方案,其中任何一个都可以。

业力 (hypothes.is)

这不是一个宝石,而是一个概念。授予新用户有限的权限,例如只读访问权限。让用户通过成为会员一段时间,或通过贡献内容,或通过与您网站内的朋友和同行联系等方式获得新的特权。

这就是像 StackOverflow 这样的网站的工作方式,在 http://hypothes.is 上有很多关于这些方法的好信息

连击

最强大的方法是这些技术的组合。

也许给一个新用户一些基本的能力,比如阅读信息,然后让他通过上面的一个或多个身份验证来获得新的能力。这就是 Google 和 Facebook 添加一些功能的方式:您可以轻松注册,然后验证其他电子邮件,然后验证您的电话号码,然后验证您的邮政地址。

于 2012-06-11T01:26:39.637 回答
1

不,没有 Rail drop-in 解决方案,它没有多大意义。

evercookie 是用 JavaScript 编写的,另外使用 SWF (Flash) 对象作为本地共享对象,并使用 PHP 来在服务器端生成缓存的 PNG 和 ETag。

几乎所有的 Evercookie 技术都依赖于浏览器的特殊 Javascript API,因此无法将它们移植到服务器端技术(除了小的 PHP 部分)。

gem 可能使集成和更新更容易,但它仍然是客户端的 Javascript。

请考虑 Evercookie 的道德影响。在我看来,它是一个概念证明,而不是一个被广泛使用的工具。

于 2012-06-14T13:45:17.157 回答
-1

如果您想推出自己的解决方案,一个好的起点(使用 cookie)将是:

def create
  if cookies[:xyz]
    render :text => 'cheater!'
  else
    # save the user first (you may need to display the form again), and then set the cookie
    cookies[:xyz] = { :value => "1", :expires => 1.day.from_now }
   end
end

编辑:这与evercookie 无法相比,只是一个简单的替代方案。

编辑 2:我已经说过验证码是作者可能应该使用的,所以我是否因为展示如果他仍然想使用 cookie 的起点是什么而被否决?

于 2012-06-03T19:50:31.537 回答