2010-09-05 70 views
8

我很確定很多人都想到了這一點,但出於某種原因,我無法使用Google和StackOverflow搜索找到它。使鏈接完全隱形?

我想製作一個不可見的鏈接(黑名單robots.txt)到一個CGI或PHP頁面,它將「陷阱」惡意機器人和蜘蛛。到目前爲止,我已經試過:

  1. 體內空鏈接:

    <a href='/trap'><!-- nothing --></a> 
    

    這個工程相當不錯的大部分時間,有兩個小問題:

    問題:該鏈接是文檔正文的一部分。儘管使用鼠標幾乎不可觸摸,但一些訪問者仍然無意中擊中了它,而鍵盤導航使用標籤輸入。另外,如果他們將頁面複製粘貼到文字處理器或電子郵件軟件中,例如,陷阱鏈接被複制,有時甚至可以點擊(某些軟件不喜歡空的<a>標籤並將href複製爲內容標籤)。在身體

  2. 隱形塊:

    <div style="display:none"><a href='/trap'><!-- nothing --></a></div> 
    

    這解決了鍵盤導航的問題,至少在我的瀏覽器測試。該鏈接在頁面的正常顯示中是無法訪問的,而對於大多數蜘蛛機器人來說,它們目前的智能水平仍然完全可見。

    問題:鏈接仍然是DOM的一部分。如果用戶複製粘貼頁面的內容,它會重新出現。

  3. 內註釋塊:

    <!-- <a href='/trap'>trap</a> --> 
    

    這有效地從頁面的DOM的鏈接。好吧,從技術上講,註釋仍然是DOM的一部分,但它達到了預期的效果,即兼容的用戶代理不會生成A元素,因此它不是實際的鏈接。

    問題:現在大多數蜘蛛機器人都足夠聰明地解析(X)HTML並忽略註釋。我親眼看到使用Internet Explorer COM/ActiveX對象解析(X)HTML並通過XPath或Javascript提取所有鏈接的殭屍工具。這些類型的機器人不會陷入陷阱超鏈接之後。

我使用方法#3,直到昨天晚上,當我被那似乎是真的選擇在哪些鏈接他們也跟着機器人的羣擊。現在我回到方法2,但我仍在尋找更有效的方法。

任何建議,或我錯過了另一個不同的解決方案?

回答

12

添加像你說:

<a id="trap" href='/trap'><!-- nothing --></a> 

然後用JavaScript/jQuery的刪除:

$('#trap').remove(); 

垃圾郵件機器人不會執行JavaScript,看到了元素,幾乎所有的瀏覽器刪除元素使其無法打到它

編輯:最簡單的非jQuery方式是:

<div id="trapParent"><a id="trap" href='/trap'><!-- nothing --></a></div> 

然後使用JavaScript將其刪除:

var parent = document.getElementById('trapParent'); 
var child = document.getElementById('trap'); 
parent.removeChild(child); 
+0

如果某些客戶端沒有啓用JavaScript,該怎麼辦? – 2010-09-05 22:55:18

+1

然後他們沒有看到鏈接,但有能夠選中鏈接的缺點。這不是100%修復,但我不認爲有很多客戶會選擇禁用javascript的不可見鏈接。 – 2010-09-05 22:57:55

+0

這似乎是一個很好的解決方案!我並不十分擔心JavaScript的依賴性,因爲它隻影響兩個少數派(通過複製粘貼或標籤查找鏈接以及禁用腳本的那些人)的交集。你可以擴大你的答案,包括一個不依賴於jQuery的解決方案嗎?我認爲它應該涉及document.GetElementById()和node.parentNode.removeChild(),但我對JavaScript的使用經驗非常有限。 – Juliano 2010-09-05 23:21:32

2

這個解決方案似乎很適合我的工作,幸運的是我已經書籤它。我希望它也能幫助你。

您可以創建一個像這樣的隱藏鏈接,並將其放在頁面的左上角,並防止普通用戶輕鬆訪問它,您可以使用css在該圖像上放置徽標圖像。

<a href="/bottrap.php"><img src="images/pixel.gif" border="0" alt=" " width="1" height="1"></a> 

如果你有興趣在建立怎樣黑名單機器人蔘考此鏈接爲HOWTO的詳細的解釋。

http://www.webmasterworld.com/apache/3202976.htm

+0

如果我錯了,糾正我,但是這個討論是否包含如何添加鏈接到陷阱的答案?如果是這樣,請在您的答案中提及它以便於更容易地發現(並且爲那些想知道具體情況的人留下鏈接) – 2010-09-05 23:01:11

+0

陷阱本身不是問題。我使用一個守護進程從陷阱腳本接收消息,並將IP地址添加到iptables「最近」匹配規則中,禁止IP 1小時。問題是以乾淨的方式添加頁面鏈接。您的解決方案並不比我使用的方法更好,因爲不僅鏈接可訪問(並且可點擊),如果用戶複製粘貼文本,它會複製鏈接_和_圖像。有時圖像被嵌入,有時會被破壞,有時應用程序會將鏈接基礎添加到原始鏈接。 – Juliano 2010-09-05 23:27:43