2014-06-08 39 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的浏览器的正常连接。