【问题标题】:Prevent cURL requests from my website阻止来自我的网站的 cURL 请求
【发布时间】:2014-06-08 07:21:31
【问题描述】:

我有一个包含大量产品和价格数据库的网站。
我一直在为价格而烦恼。

我想用<noscript> 标签来阻止它,但我能做的就是隐藏内容,机器人仍然能够抓取我的内容。

有没有办法运行 JS 测试以查看 js 是否被禁用(以检测机器人)并重定向这些请求,可能在黑名单中。

这样做会阻止谷歌浏览我的网站吗?

【问题讨论】:

  • 您可以在没有userAgent 的情况下拒绝请求(但使用 cURL 您可以绕过它)或将 Google、Facebook、Twitter 机器人 userAgent 等列入白名单。
  • 只要数据是公开的,就真的没有简单的自动化解决方案。始终可以重写机器人以绕过您的检查。
  • 为什么不使用 htaccess 通过 IP 或位置来阻止机器人?
  • 您可能想要使用一些身份验证或使用 cookie 跟踪用户
  • @VincentDecaux 他们只是改变了他们的 IP,它不会持续很长时间

标签: javascript php curl screen-scraping


【解决方案1】:

由于 CURL 只是一个 html 请求,因此您的服务器无法区分,除非您限制某些 url 的访问权限或检查引荐来源网址并针对未在本地引用的任何内容实施过滤器。可以在此处找到如何构建检查的示例:

Checking the referrer

【讨论】:

  • 我可以在发送请求时使用任何我想要的referer。这只是另一个标题
  • 我并不是说不可能进行欺骗,我说这是一个可行的选择,并且是过滤传入 http 请求的少数方法之一。不知道为什么人们会否决有效且有用的建议。与其投反对票,不如发布一个更好的解决方案。
  • 嗯,答案是不正确的。正确答案是:不能。
  • 一种方法可以做到这一点,这不是它。
【解决方案2】:

您可以通过检查User Agent 在php 中阻止未经欺骗的cURL 请求。据我所知,没有一个搜索引擎爬虫在其用户用户代理字符串中包含 curl,所以这不应该阻止它们。

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

请注意,更改cURL 请求的User Agent 字符串很简单,因此有人可以轻松绕过。

【讨论】:

    【解决方案3】:

    您需要创建一个阻止列表并阻止 ips 访问内容,所有标头,包括引荐来源和用户代理都可以通过简单的以下代码在 curl 中轻松设置

    $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 的浏览器的正常连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-21
      • 1970-01-01
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 2022-01-13
      • 2015-04-27
      • 2021-03-01
      相关资源
      最近更新 更多