2012-12-18 63 views
2

我在想什麼Rails提供了混淆電子郵件地址以防止爬蟲,垃圾郵件和郵件收集器收集地址以發送垃圾郵件。如何保護我的電子郵件地址免受垃圾郵件的攻擊

可能是我使用了錯誤的關鍵字,但沒有真正能夠找到寶石。

我發現了一個統計比較不同方法來掩蓋郵件地址: http://techblog.tilllate.com/2008/07/20/ten-methods-to-obfuscate-e-mail-addresses-compared/

我寫的,它結合了上面兩個方法,一個片段。

的文檔片斷尚未成熟,但我還是想要分享它,它可能是其他面臨同樣問題的起點。 (接下來的一步是用隱藏的純文本替換已經鏈接的地址。)

在開始之前,我想知道什麼是最佳的rails實踐。這是一個普遍的問題,我一定錯過了處理它的寶石!?

如果我使用我的方法,在我的應用中整合/觸發它的最佳方法是什麼?

任何一種before_filter?渲染之前?像那樣的東西?

或者像我現在這樣做,在視圖中調用它作爲helper_methode?

它甚至可以被添加到字符串類...


在我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.!#\$%+-][email protected][\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

只需使用內置的mail_to幫手Rails有...

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

mail_to '[email protected]', 'click to email', :encode => .... # couple of encoding options 

注意:這在Rails 4中不起作用。從文檔:在Rails 4.0之前,mail_to提供了用於編碼地址的選項,以阻止電子郵件收割者。要利用這些選項,請安裝actionview-encoded_mail_to gem。 (感謝@zwippie)

+0

我有點發揮各地。很好!我喜歡編碼選項。這幾乎符合我的需求。我更尋找一顆寶石。我想有一個方法,以HTML /文本解析和掩蓋郵件。 –

+1

注意:這在Rails 4中不起作用。從文檔:在Rails 4.0之前,mail_to提供了用於編碼地址的選項,以阻止電子郵件收割者。要利用這些選項,請安裝actionview-encoded_mail_to gem._ – zwippie

相關問題