2012-01-18 25 views
2

什麼樣的算法做網站,包括stackexchange用來捕捉機器人? 什麼使他們有時失敗並向普通用戶提供人工驗證? 對於在PHP上運行的Web應用程序和網站,您會推薦什麼來阻止機器人和機器人攻擊,甚至是內容竊取?捕捉機器人的算法

謝謝。

+2

防止被盜內容的最有力的武器是法律。如果有人從您那裏竊取信息,請儘可能考慮起訴他們或使用DMCA將他們的網站刪除。 – 2012-01-18 23:08:15

回答

2

檢查出http://www.captcha.net/以獲得簡單易行的人工驗證工具。

防止盜取內容將是非常困難的,因爲您要信息可供您的訪問者使用。

不是禁用右鍵單擊,它只會惹惱你的用戶,並不以任何方式阻止內容盜賊。

您將無法阻止所有機器人,但是您將能夠實現各層安全機制,每個機器人都會阻止部分機器人。

一些提示和技巧;

  • 使用Captcha進行人工驗證,但不要使用Captcha進行人工驗證,因爲它們會妨礙用戶的使用。
  • 您可以使用Captcha進行電子郵件驗證,並且需要登錄您的內容(如果它不會嚇跑太多用戶)。或者考慮免費提供部分內容並要求註冊全部內容。
  • 定期檢查您的其他網站上的內容片段(通過Google,可能通過Google API自動生成)以及起訴/起訴DMCA通知,如果他們公然偷走(未引用)您的內容。
  • 限制個人客戶向您的網站發出請求的速度。機器人會經常颳得很快。每秒多次請求內容對於用戶來說已經很多了。有些服務器工具可以實現這一點,例如。退房http://www.modsecurity.org/

我相信有更多的安全層可以被想到,但這些讓人浮想聯翩。

1

我碰到了an interesting article from Princeton University,它爲自動機器人檢測提供了很好的想法。這個想法很簡單。人類的行爲與機器的行爲不同,自動化的訪問通常不同於人。

本文介紹了一些可以在幾個請求過程中完成的基本檢查。您花費了一些請求來收集有關客戶如何瀏覽的信息,並且在您花費所有變量並做出斷言之後花費一些時間。要包括的內容有:

  • 鼠標移動:機器人很可能不會使用鼠標,因此不會在瀏覽器中生成鼠標移動事件。你可以準備一個javascript函數,比如說「onBodyMouseMove()」,只要鼠標移過頁面的整個區域就可以調用它。如果調用此函數,請在會話計數器中計數+1。

  • Javascript:一些機器人不會花時間運行javascript(即curl,wget,axel和其他命令行工具),因爲它們大多發送返回有用輸出的特定請求。您可以準備一個在加載頁面後調用的函數,並在會話計數器中計數+1。

  • 隱藏鏈接:爬行機器人是吸吮機器,不關心網站的內容。它們旨在點擊所有可能的鏈接並將所有內容吸引到鏡像位置。您可以在網頁的某處插入隱形鏈接 - 例如,幾個nbsp;位於由錨標記包圍的頁面底部的空格字符。人類永遠不會看到這個鏈接,但你會得到一個請求,在會話計數器中計數+1。

  • CSS,圖像和其他可視化組件:機​​器人很可能會忽略CSS和圖像,因爲他們對呈現網頁不感興趣。您可以將鏈接隱藏到以* .css或* .jpg結尾的URL中(您可以使用Apache重寫或Java的servlet映射)。如果訪問這些特定的鏈接,它很可能是瀏覽器加載CSS和JPG查看。

注意:* .css,* .js,* .jpg等通常只在會話中每頁加載一次。您需要在最後附加一個唯一的計數器,以便瀏覽器在每次請求頁面時重新加載這些鏈接。

一旦您通過幾個請求收集會話中的所有信息,就可以做出斷言。例如,如果你沒有看到任何javascript,css或鼠標移動活動,你可以認爲它是一個bot。您可以根據自己的需要考慮這些計數器,這樣您就可以根據這些變量以任何方式對其進行編程。如果您決定某個客戶端是機器人,則可以在繼續進一步請求之前強制他解決某個驗證碼。

只是說明:平板電腦通常不會創建任何鼠標移動事件。所以我仍然試圖找出如何處理它們。歡迎提出建議:)

+0

我能夠找出平板電腦/智能手機的東西。他們沒有鼠標移動,但他們的瀏覽器支持與觸摸屏幕相關的新JavaScript事件。他們產生像touchstart,touchend和touchmove這樣的事件。您可以包含事件處理函數'document.addEventListener('touchmove',function(event){0} {0}}} onBodyMouseMove(); },false);'這將導致這些事件註冊,就像用戶將鼠標移動到頁。 – JulioHM 2012-12-05 19:15:47