2013-03-21 66 views
1

我無法谷歌在這個問題上有用的東西,所以我會很感激鏈接到在這個問題處理的文章,或直接在這裏回答,要麼罰款。防止搜索濫用​​

我在一個網站上實現了一個PHP/MySQL搜索系統,這個網站有很多訪問者,所以我要實現一些限制,允許訪問者在搜索字段中輸入的字符長度和兩次搜索之間所需的最短時間。由於我對這些問題很陌生,而且我不知道爲什麼通常會這樣做的「真正原因」,所以我只假設字符最小長度是爲了儘量減少數據庫返回結果的數量而實現的,並且搜索之間的時間間隔將被執行,以防止機器人將垃圾郵件發送到搜索系統並減慢網站速度。是對的嗎?

最後,如何實現兩次搜索之間的最短時間的問題。我想出了一個解決方案,在僞代碼,這是

  1. 設置的URL檢測Cookie,其中搜索表單提交給
  2. 將用戶重定向到URL在搜索結果應該是輸出
  3. 檢查測試cookie存在
    • 如果不是,輸出自己是不是允許使用的搜索系統警告(可能是一個機器人)
  4. 檢查一個cookie存在,告訴蒂姆最後的搜索
    • 如果這是不太有5秒前,輸出一個警告,他應該再次搜索
  5. 搜索
  6. 設置與上次搜索到當前爲止的cookie之前等待電子
  7. 輸出搜索結果

這是做的最好的方法是什麼?

我知道這意味着禁用cookies的訪問者將無法使用搜索系統,但這些日子真的是個問題嗎?我無法找到2012年的統計數據,但我設法找到了數據,說2009年有3.7%的人已經禁用了Cookie。這看起來不是很多,我想這些日子可能應該更少。

+0

「由於我對這些問題有所瞭解,並且我並不真正瞭解爲什麼通常會這樣做的」真正原因「,」您認爲可能沒有必要嗎?我不做任何工作或個人網站。 – 2013-03-21 00:31:59

+0

@Dagon我已經考慮過這個,我也沒有實現過。但是這個特定的網站最近遭到了很多DDoS的攻擊,客戶對這個問題的未來問題感到害怕,所以我認爲搜索濫用應該是另外一件事情,以防止... – 3Nex 2013-03-21 00:57:58

+0

如果你想花時間修復不存在的問題 - 玩的開心! – 2013-03-21 01:01:05

回答

0

「只有我假設字符最小長度是爲了最小化數據庫返回結果的數量而實現的」。你的假設是絕對正確的。它通過迫使用戶思考,他們希望搜索什麼來減少潛在結果的數量。

就垃圾郵件發送您的搜索,您可以實施captcha,最常用的是recaptcha。如果您不想立即顯示驗證碼,則可以跟蹤(通過會話)用戶提交搜索的次數,並且如果在特定時間範圍內發生X次搜索,則渲染驗證碼。

我見過像SO和thechive.com這樣的網站實施這種類型的策略,其中captcha不會立即呈現,但會在呈現閾值時呈現。

+0

是的,Youtube也有評論。好好想想,會考慮的。謝謝。 – 3Nex 2013-03-21 01:01:47

0

這樣可以防止搜索引擎將您的搜索結果編入索引。這樣做的一個更清潔的方式是:

  1. 獲取IP在哪裏搜索起源
  2. 商店知識產權在緩存系統,如分佈式緩存和查詢作出
  3. 如果另一個查詢是從同一發送時間IP和小於X秒只需通過拒絕或者讓用戶等待

可以做,以提高性能的另一件事是看看分析,看看哪些查詢是由最經常和緩存的,所以當一個請求進入服務緩存的版本,而不是完整的數據庫查詢,解析等...

另一個天真的選擇是讓腳本每天運行1-2次,運行所有常見查詢並創建用戶在創建特定搜索查詢時碰到的靜態HTML文件,而不是點擊D b。

+0

自從何時goolge bot填寫並submt網站搜索? – 2013-03-21 00:39:13

+0

據我所知,如果有人鏈接:http://example.com?q = myQuery可能有一種可能性,谷歌將該頁面添加到該特定域的抓取列表 – 2013-03-21 00:42:16

+0

只會是一個問題,如果是唯一的聯繫。你的IP想法不會工作,IP!=人。一個人可以是很多ip,一個ip可以是成千上萬的人 – 2013-03-21 00:44:59