2009年7月17日 星期五

保護你的e-mail地址不被機器人爬蟲收錄!

某日,當我打開學校的信箱時,發現居然有廣告信跑進來了>< 學校提供的信箱我只貼在實驗室的網站上過,沒想到已經玷污...不,是被收錄進廣告商的資料庫了(無言)= = 所以決定要與廣告商來宣戰!!

在此之前我常看到簡單的保護e-mail的作法就是把@打成at、.換成dot,目的就是為了破壞原有e-mail的規則,讓爬蟲判讀不出來這是一個有效的電子郵件,簡單易懂,卻對真的想要寫信給你的人造成困擾。

因此,以下就分析幾種躲避爬蟲爬出e-mail的方法~
##ReadMore##
首先,對於顯示在網頁上的部分,出現完整的E-Mail地址絕對是不可行,這是最容易被收錄的情況,爬蟲甚至不用拜訪你的網頁,直接在Google找資料就可以了,因此以下就逐步分析有效的對付爬蟲的方法:

用圖片來顯示E-Mail是有效的方法之一,在爬蟲不具備文字辨識下,能夠有效的防止被收錄,因為爬蟲將其視為一張圖片。


如上例,是不是看起來就像一般文字呢?facebook也是利用此方法保護信箱的位置,不過大家應該也發現問題了,這個方法麻煩的地方在於,想要寫信給你的人還得要自己把e-mail打進收件者的地方,打錯就麻煩了~.~

因此在網路上出現一種利用JavaScript的方法,來顯示信箱,一個簡單的範例如下:

<script type="text/javascript">
document.write('username@' + 'example.com');
</script>

將這段程式碼放在網頁上,最後的結果就是顯示出:

username@example.com

這樣一來就可以讓使用者複製了,而且對於爬蟲來說,他看到的是那段程式碼,因此並不符合他想收錄的信箱格式,事情真有那樣簡單?!

天不從人願,事實並非如此,事實上,只要爬蟲觀察DOM,就可以輕易的找出完整的信箱地址,用任何瀏覽器提供的開發者工具就能輕易的找出來,如下圖:


因此利用JavaScript的document.write方法並不妥當,所以利用圖片顯示是比較保險的方法,不過為了讓想要寫信給你的人方便,通常我們會用一個連結,並配合mailto的語法,讓你點email時,直接呼叫寫信的軟體,並自動填上收件人,一個簡單的例子如下:

<a href="mailto:username@example.com"><img src="mail.gif" border="0"></a>

或者因為有連結,我們也可以使用非email的文字替代連結,如下:

<a href="mailto:username@example.com">寫信給我</a>

然而,相同的問題又出現了,爬蟲只要觀察原始碼,就能輕易找出藏在href參數中的值就是信箱位置,而且這次還多了mailto這個關鍵字可以判斷,更不會跟一般的連結搞混。

有鑑於此,我們就不要讓信箱出現在href參數當中,我們利用JavaScript,讓連結的位置在當點下這個連結時才動態產生,動態的目的是因為爬蟲通常只觀察載入完畢後的DOM,只有人類才會有動作去點這個連結,而DOM也就在點擊時才發生改變,一個簡單的範例如下:

HTML:
<a href="#" onClick="m('username','example.com');">寫信給我</a>

JavaScript:
<script language="JavaScript">
function m(a,b){
var x="@";
window.location.replace("m"+'a'+"i"+'l'+"t"+'o'+":"+a+x+b);
}
</script>

你可以看的出來,href當中已經沒有任何有意義的值,我們利用onClick,讓當點下此連結時,呼叫m涵式,再利用location的方式,連結至mailto。你也看的出來,我們故意將mailto每個字母分離,並用單、雙引號來混淆視聽,甚至連涵式的名字我們都故意用m一個字母表示,絕不出現mail或sendmail之類的關鍵字。有人也許會有疑問,在呼叫m時所傳入的參數上就有除了@之外的usename與example.com!沒錯,但是對於爬蟲來說,這個字串並沒有很明顯的特徵清楚的告訴爬蟲,這是一個去掉@的信箱位置。

不過對於爬蟲,他也許會判別出所有的a標籤,並全部都去點點看,假設是普通連結,則忽略,假如是呼叫了系統預設的郵件軟體,則判定是信箱位置。這是一個很棘手的問題,對於這種『都點點看、連連看』的爬蟲,我們可以偽裝這個超連結來躲避,一個簡單的範例如下:

HTML:
<span style="cursor:pointer;" onClick="m('username','example.com');">寫信給我</span>

JavaScript:
同前例

看出來了嗎?我們避免使用a這個HTML標籤,而使用span這個標籤來代替他,並用CSS讓他看起來像連結,像是滑鼠移上去變成手指,你也可以為他加上底線跟顏色,讓他看起來更像連結。

廣告信一直以來就是一個頭痛的問題,網路上絕對沒有一種有效的方法能夠保護好信箱的位置,因為爬蟲只要換成人,什麼信箱位置都無所遁形,因此我們也只能盡量的保護我們的信箱位置,不隨便洩漏信箱,或是申請一個信箱專門對外公開,過一段時間拋棄,而真正在使用的信箱只給身旁的親友才是比較上策的方法。

歡迎提出更有效或是改進的方法!

2009年5月16日 星期六

查IP!!

用IP查地區
只能標出你所在的地區
我試過用其他屬於臺南的IP下去測
都是同一個點

實在是夠神奇了

2009年5月11日 星期一

http://www.ajaxrain.com/

http://www.ajaxrain.com/

很多AJAX套件的收集庫
很棒喔!

2009年5月3日 星期日

關於SEO的文章

到底什麼是SEO http://seo-worker.blogspot.com/2007/06/seo_28.html

SEO的第一課-硬體策略與網址選定 http://seo-worker.blogspot.com/2007/07/seo.html

SEO第二課-關鍵字策略 http://seo-worker.blogspot.com/2007/07/seo_05.html

SEO的第三課-搜尋引擎的運作分析 http://seo-worker.blogspot.com/2007/07/seo_17.html

SEO的第四課-搜尋引擎的規則 http://seo-worker.blogspot.com/2007/11/seo.html




資料來源:小王子的浮世隨筆Ⅱ.0 http://seo-worker.blogspot.com/

免費圖示、免費資源

http://www.freegroup.org/category/free-icons/

網頁素材啦!
有需要的人把他加進去我的最愛吧~

好用的Javascript日曆

突然看到的
有興趣的人可以用看看
試用:http://www.pavilion-gift.com.tw/test/test.htm
作者blog:http://kelunyang.wordpress.com/2009/05/01/javascript%E6%97%A5%E6%9B%86/

開新資料夾


Step and Go!
(鏡音鈴)

現在的XP已經把點兩下資料夾這個開啟資料夾的動作
從早期的在另外顯示一個視窗顯示資料夾內容
改成顯示在同一個視窗中
可是如果想在另外一個視窗顯示開啟後資料夾中的內容該怎麼辦呢?
##ReadMore##
其實方法很簡單,只要在點兩下資料夾前按住Ctrl後再點資料夾兩下
就會在新的視窗中開啟
對於要比對兩個資料夾內容或是複製檔案時
有不錯的效果



niconico版