精品国产免费观看久久久_久久天天躁狠狠躁夜夜爽_无码人妻少妇久久中文字幕_狠狠做深爱婷婷久久综合一区

互聯網知識

精準傳達 ? 價值共享

洞悉互聯網前沿資訊,探尋網站營銷規律

查看其它板塊

HTML網頁中電子郵箱(Email)地址的加密和混淆防爬取

作者:Smileby陌少羽 | 2019-05-09 22:31 |點擊:

郵箱里垃圾郵件一直有很多,這讓我不得不重新審視,發布在網頁上的電子郵箱地址,為了避免垃圾郵件,我刻意將@更換成#,也許這在十年前是個不錯的辦法,但是隨著神經網絡和機器學習新算法的發展,這一類小手段也面臨失效的風險,因為大部分都是通過修改電子郵箱地址的“@”符號,通過正則表達式篩選和特征值匹配,比如hotmail.com、gmail.com、163.com這一類疑似電子郵箱地址的特征,還是可以抓取到電子郵箱地址,所以在將Email發布到HTML網頁之前我們要對其進行加密和混淆。

下面我以john@example.com為例,介紹幾種加密和混淆的反垃圾郵件手段。

1. 生成圖片

利用傳統的圖靈測試CAPTCHA,將防止采集的電子郵箱地址生成圖片,利用機器不能識別的特性,來區別人和機器,生成圖片的方式有很多,除了高大上的Photoshop外,甚至可以使用系統自帶的繪圖工具來完成,另外希望偷懶的話,還有一些在線工具可以幫助到你,比如《Top 10 Websites to Turn Your Email Address into An Image》。

 

當然生成圖片也不是萬無一失的,有理由相信既然基于圖片的驗證碼能夠被機器識別破解,那么基于同樣技術的電子郵件地址肯定也再所難免,特別是OCR技術的逐步發展和成熟,采集程序可以對整張網頁進行OCR,最后提取需要的內容,所以我們還需要對圖片生成的郵箱地址進行噪點、干擾線等混淆,具體可以參考有關如何防止驗證碼被識別的相關內容。

但是經過這么一設計,我們的郵箱地址對于真正需要的人來說則變得不那么友好,人們獲取準確郵箱地址的難度也加大了。

2、替換關鍵符號

我們知道爬蟲抓取電子郵箱地址很多都是通過@這個特征符號,正如我文章一開頭所述,將這個符號替換成別的那么將大大降低我們電子郵箱被抓取的概率,當然這樣做的壞處是除非給用戶以暗示,否則需要另外說明這是個電子郵箱地址,比如john#example.com又或者john{a}example.com等等,當然智能的電子郵箱抓取軟件可以對這些小把戲自動免疫,通過判斷域名也可以得到這是個電子郵箱地址,所以說將@替換成一個很特別的符號也是一種生存之道,對于這種替換手段來說,更有甚者將郵箱地址變成句子,比如john AT example DOT com,這樣看來應該更安全了,但是也給真正需要這個電子郵箱地址的用戶帶來了少許困擾。

3、使用JavaScript

JavaScript簡稱JS通常作為嵌入到網頁的一段小腳本,為其提供更為豐富的交互和應用,我們通過JS混淆我們的電子郵箱地址,最后再用document.write或者innerHTML等輸出來,這樣的好處是絕大多數爬蟲并不能執行網頁里的腳本,它們只擅長抓取靜態文本,所以完全不必擔心郵箱地址泄露給爬蟲,另外對于最終用戶來說,通過瀏覽器的解釋,展現在他們面前的全是一個完整的電子郵箱地址,用戶體驗好,不過這種方式有個較為致命的弱點就是如果用戶瀏覽器不支持腳本,那么郵箱地址也就不能正常顯示了,雖然這種情況不多見。

一個典型的例子如下,當然有很多變形的實現,比如PHP hide_email我這里也不多介紹了。

var username = "john";
var hostname = "example.com";
document.write(username + "@" + hostname);

尤其值得一提的是ROT13算法的應用,ROT13即回轉13位,說到底就是將字母表首位銜接成環,將待編碼字母映射到其旋轉的13位的字母上,如下示意圖所示:

ROT13 算法示意

對于PHP來說,有函數str_rot13可以直接使用,然后根據其算法反轉即可得到加密前的文本,一般使用如下JS代碼:

<script type="text/javascript">document.write("<n uers=\"znvygb:xvpx@vaprcgvba.pbz\" ery=\"absbyybj\">Fraq n zrffntr</n>".replace(/[a-zA-Z]/g, 
  function(c){return String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+13)?c:c-26);}));
</script>

上述代碼將解碼成以下HTML:

<a href="mailto:kick@inception.com" rel="nofollow">Send a message</a>

4、使用HTML和CSS混淆

當然我們除了采用JavaScript,還可以利用HTML或者CSS的一些小技巧(tricks),使用HTML注釋混淆,在HTML中以<!---->包含的是注釋,不會被瀏覽器渲染給最終用戶,那么我們可以充分利用這一點從而將我們的電子郵件地址打造成這樣的:

jo<!-- >@. -->hn@<!-- >@. -->exam<!-- >@. -->ple.com

這里<!-- >@. -->不會被瀏覽器顯示,但是足以混淆機器爬蟲的抓取。

同樣的結合CSS的display:none,我們仍然可以得到以下類似手段的混淆:

jo<span style="display:none">@</span>hn@<span style="display:none">@</span>exam<span style="display:none">@</span>ple.com

同樣的CSS的display:none必然注定了其包含的文本不會被顯示,所以最終顯示的也是完整的電子郵箱地址。

對于CSS來說還有一種辦法也可以讓我們規避爬蟲抓取,那就是利用CSS文本顯示順序的特點,比如以下:

<span class="obfuscate">moc.noitpecni@kcik</span>

其中CSS代碼如下:

.obfuscate { unicode-bidi: bidi-override; direction: rtl; }

首先文本是被我們逆序的,如果要還原,在不借助JS的情況下可以通過CSS將其再次逆序,從而得到正確的文本,當然這個方法我試用下來有一點不足,那就是用戶選擇復制電子郵箱地址仍然是逆序的。

最后總結來看,在對抗垃圾郵件爬蟲收集的方法上充分發揮了網友的聰明才智,也涌現出各種有才的實現,限于篇幅我也不一一介紹了,其實沒有絕對的安全,最安全的辦法就是沒有電子郵箱地址,此話怎講?那就是使用聯系表單(Contact From),讓需要和你聯系的人直接通過表單和你發郵件,從而避免了電子郵件地址的公開,網上聯系表單的開源代碼也有一堆,我的博客最后考慮的方式也是這個,現在大家可以通過右上角“關于我”找到這個鏈接并給我發消息了。

如沒特殊注明,文章均為狐靈科技原創,轉載請注明?? "HTML網頁中電子郵箱(Email)地址的加密和混淆防爬取
多一份免費策劃方案,總有益處。

請直接添加技術總監微信聯系咨詢

網站設計 品牌營銷

多一份參考,總有益處

聯系狐靈科技,免費獲得專屬《策劃方案》及報價

咨詢相關問題或預約面談,可以通過以下方式與我們聯系

業務熱線:15082661954 / 大客戶專線:15523356218