2

我想知道 Rails 提供什么来混淆电子邮件地址,以保护它免受爬虫、垃圾邮件机器人和邮件收割机的侵害,收集地址以发送垃圾邮件。

可能是我使用了错误的关键字,但并没有真正找到宝石。

我发现了一个比较不同方法来掩盖邮件地址的统计数据:http: //techblog.tilllate.com/2008/07/20/ten-methods-to-obfuscate-e-mail-addresses-compared/

我写了一个片段,结合了前两种方法。

剪辑还不成熟,但我还是喜欢分享它,这可能是其他面临同样问题的人的起点。 (下一步是用模糊的纯文本替换已经链接的地址。)

在继续之前,我想知道什么是 Rails 的最佳实践。这是一个常见问题,我一定错过了处理它的宝石!?

如果我使用我的方法,在我的应用程序中集成/触发它的最佳方法是什么?

任何一种before_filter?渲染前???类似的东西?

还是像我现在做的那样,在视图中将其称为 helper_methode?

它甚至可以添加到字符串类中……</p>


在我的application_helper.rb

def obfuscate_emails(content, domain_prefix = 'nirvana', clss = 'maildecode')
  # This shall protect emails from spam spiders/crawlers gathering emails from webpages
  # Add the following SASS to your Stylesheets
  #
  # span.maildecode
  #   direction: rtl
  #   unicode-bidi: bidi-override
  #
  # Further more you might want to use Javascript(.erb) to add links to the email addresses like this
  #
  # $(document).ready(function() {
  #   function link_emails(subdomain){
  #     console.log("Find an replace reverse emails, fake subdomain is "+subdomain);
  #     $(".maildecode").each(function() {
  #       email = $(this).text().replace('.'+subdomain,'').split("").reverse().join("");
  #       console.log("- clean email is "+email);
  #       // $(this).html($(this).text().replace('.'+subdomain,'')); // uncomment if you like to clean up the html a bit
  #       $(this).wrap('<a href="mailto:'+email+'">');
  #     });
  #   }
  #
  #   link_emails('<%= ENV['OBFUSCATE_EMAIL_SUBDOMAIN'] %>');
  # });
  #
  # Thanks to
  # http://techblog.tilllate.com/2008/07/20/ten-methods-to-obfuscate-e-mail-addresses-compared/

  email_re = /[\w.!#\$%+-]+@[\w-]+(?:\.[\w-]+)+/
  content.scan(email_re).each do |mail|
    obfuscate_mail = "<span class='#{clss}'>#{mail.reverse.split('@')[0]}<span style='display: none;'>.#{domain_prefix}</span>@#{mail.reverse.split('@')[1]}</span>"
    content = content.sub(mail, obfuscate_mail)
  end
  content # use raw(obfuscate_emails(content)) otherwise rails will escape the html
end
4

2 回答 2

5

mail_to只需使用Rails内置的帮助程序...

http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-mail_to

mail_to 'email@here.com', 'click to email', :encode => .... # couple of encoding options

注意:这不再适用于 Rails 4。来自文档:在 Rails 4.0 之前,mail_to 提供了对地址进行编码的选项,以阻止电子邮件收割者。要利用这些选项,请安装 actionview-encoded_mail_to gem。(感谢@zwippie)

于 2012-12-18T21:13:34.740 回答
0

您可以简单地将 @-sign 替换为一个简单的解决方案:

"example@example.com".sub("@","-at-") #=> example-at-example.com
"example@example.org".sub("@","{at}") #=> example{at}example.org

查看使用 ruby​​ 混淆电子邮件以防止收割机

于 2013-10-15T17:28:33.927 回答