2014-06-08 62 views
3

我有一個包含大量產品和價格數據庫的網站。
我一直在爲價格而曲折。防止來自我網站的cURL請求

我想過用<noscript>標籤來防止它,但我所能做的就是隱藏內容,機器人仍然能夠刮掉我的內容。

是否有一種運行JS測試的方法,以查看js是否被禁用(檢測殭屍程序)並將這些請求重定向,可能在黑名單中。

這樣做會阻止谷歌通過我的網站?

+0

您可以在沒有'userAgent'的情況下拒絕請求(但是cURL可以繞過這個),也可以將Google,Facebook,Twitter機器人userAgent等列入白名單。 –

+0

只要數據是公開的,確實沒有簡單的自動化解。機器人總是可以重寫,繞過你的支票。 –

+0

爲什麼不使用htaccess按IP或位置阻止殭屍程序? –

回答

1

由於CURL只是一個html請求,您的服務器無法區分,除非您限制某些URL的訪問權限或檢查引薦網址,並針對本地未引用的任何內容實施過濾器。如何建立一個檢查一個例子可以在這裏找到:

Checking the referrer

+0

發送請求時,我可以使用任何我想要的引用程序。這只是另一個標題 – PeeHaa

+1

我沒有說它不可能欺騙,我說這是一個可行的選擇,也是少數幾個如果不只是過濾傳入的http請求的方法之一。不知道爲什麼人們投下一些有效和有用的建議。爲什麼不發佈更好的解決方案,而不是進行投票。 – Silvertiger

+0

那麼答案是不正確的。正確的答案是:你不能。 – PeeHaa

1

您可以通過檢查User Agent塊在PHP unspoofed cURL請求。據我所知,沒有一個搜索引擎抓取工具在用戶用戶代理字符串中捲曲,所以這不應該阻止它們。

if(stripos($_SERVER['HTTP_USER_AGENT'],'curl') !== false) { 
    http_response_code(403); //FORBIDDEN 
    exit; 
} 

注意改變User Agent字符串cURL請求是微不足道的,所以有人可以很容易地繞過這一點。

1

您將需要創建一個塊列表和訪問內容分塊的IPS,包括來源和用戶代理的所有頭可以捲曲用簡單的下面的代碼

$agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)'; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
curl_setopt($ch, CURLOPT_URL, 'http://www.yoursite.com?data=anydata'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_REFERER, 'http://www.yoursite.com'); 
$html = curl_exec($ch); 

上面會設定很容易使curl請求看起來像來自使用Firefox的瀏覽器的正常連接。