铁轨的Evercookie

时间:2012-06-03 16:55:32

标签: ruby-on-rails cookies

我找到了一个解决方案来检测欺骗者在我的网站上创建了多个帐户。

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

4 个答案:

答案 0 :(得分:3)

电子邮件令牌(Devise,Sorcery)

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

许多网站使用的简单解决方案是向用户发送带有安全令牌的电子邮件。一个很好的Rails宝石是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)

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

信用卡(BrainTree)

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

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

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

Image Captchas(recaptcha)

要阻止僵尸程序,像Ruby recaptcha这样的验证码可以很好地工作。

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

Karma(hypothes.is)

这不是一个宝石,但它是一个概念。为新用户提供有限权限,例如只读访问权限。让用户在一定时间内成为会员,或通过提供内容,或通过与您网站内的朋友和同行联系等来获得新的权限。

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

连击

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

或许为新用户提供一些基本功能,例如阅读信息,然后让他通过执行上述一项或多项身份验证来获得新功能。这就是谷歌和Facebook添加一些功能的方式:您可以轻松注册,然后验证其他电子邮件,然后验证您的电话号码,然后验证您的邮政地址。

答案 1 :(得分:3)

一旦我在寻找Rails的Evercookie解决方案,就没有找到并写下一个宝石'evercookie'。你可以try it。 文档可在github

上找到

答案 2 :(得分:1)

不,没有Rail插入式解决方案,它没有多大意义。

  

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

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

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

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

答案 3 :(得分:-1)

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

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:我已经说过验证码是作者应该使用的,所以如果他仍然想要使用cookies,那么我是否因为显示起点是什么而被投票?