我有一个包含大量产品和价格数据库的网站。
我一直在为价格而曲折。防止来自我网站的cURL请求
我想过用<noscript>
标签来防止它,但我所能做的就是隐藏内容,机器人仍然能够刮掉我的内容。
是否有一种运行JS测试的方法,以查看js是否被禁用(检测僵尸程序)并将这些请求重定向,可能在黑名单中。
这样做会阻止谷歌通过我的网站?
我有一个包含大量产品和价格数据库的网站。
我一直在为价格而曲折。防止来自我网站的cURL请求
我想过用<noscript>
标签来防止它,但我所能做的就是隐藏内容,机器人仍然能够刮掉我的内容。
是否有一种运行JS测试的方法,以查看js是否被禁用(检测僵尸程序)并将这些请求重定向,可能在黑名单中。
这样做会阻止谷歌通过我的网站?
由于CURL只是一个html请求,您的服务器无法区分,除非您限制某些URL的访问权限或检查引荐网址,并针对本地未引用的任何内容实施过滤器。如何建立一个检查一个例子可以在这里找到:
发送请求时,我可以使用任何我想要的引用程序。这只是另一个标题 – PeeHaa
我没有说它不可能欺骗,我说这是一个可行的选择,也是少数几个如果不只是过滤传入的http请求的方法之一。不知道为什么人们投下一些有效和有用的建议。为什么不发布更好的解决方案,而不是进行投票。 – Silvertiger
那么答案是不正确的。正确的答案是:你不能。 – PeeHaa
您可以通过检查User Agent
块在PHP unspoofed cURL
请求。据我所知,没有一个搜索引擎抓取工具在用户用户代理字符串中卷曲,所以这不应该阻止它们。
if(stripos($_SERVER['HTTP_USER_AGENT'],'curl') !== false) {
http_response_code(403); //FORBIDDEN
exit;
}
注意改变User Agent
字符串cURL
请求是微不足道的,所以有人可以很容易地绕过这一点。
您将需要创建一个块列表和访问内容分块的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的浏览器的正常连接。
您可以在没有'userAgent'的情况下拒绝请求(但是cURL可以绕过这个),也可以将Google,Facebook,Twitter机器人userAgent等列入白名单。 –
只要数据是公开的,确实没有简单的自动化解。机器人总是可以重写,绕过你的支票。 –
为什么不使用htaccess按IP或位置阻止僵尸程序? –