Php 网页是如何被刮去的,以及如何防止有人这样做?

Php 网页是如何被刮去的,以及如何防止有人这样做?,php,apache,security,web,scrape,Php,Apache,Security,Web,Scrape,我不是说提取文本或下载网页。 但我看到人们下载整个网站,例如,有一个名为“示例”的目录,它甚至没有链接在网站上,我怎么知道它在那里?如何下载网站的“所有”页面?我该如何保护自己不受伤害 例如,apache中有“目录列表”,如果已经有索引文件,如何获取根目录下的目录列表 这个问题不是特定于语言的,我很乐意只提供一个链接来解释实现这一点的技术,或者提供一个详细的答案。要完全“下载”一个网站,你需要一个网络爬虫,它除了跟踪URL外,还保存其内容。应用程序应能够: 解析“根”url 标识指向同一域中其

我不是说提取文本或下载网页。 但我看到人们下载整个网站,例如,有一个名为“示例”的目录,它甚至没有链接在网站上,我怎么知道它在那里?如何下载网站的“所有”页面?我该如何保护自己不受伤害


例如,apache中有“目录列表”,如果已经有索引文件,如何获取根目录下的目录列表

这个问题不是特定于语言的,我很乐意只提供一个链接来解释实现这一点的技术,或者提供一个详细的答案。

要完全“下载”一个网站,你需要一个网络爬虫,它除了跟踪URL外,还保存其内容。应用程序应能够:

  • 解析“根”url
  • 标识指向同一域中其他页面的所有链接
  • 访问并下载这些以及这些子页面中包含的所有内容
  • 记住哪些链接已经被解析,以避免循环
搜索“网络爬虫”应该会给你提供大量的例子

我不知道你可以采取什么对策来避免这种情况:在大多数情况下,你希望机器人抓取你的网站,因为这是搜索引擎了解你网站的方式

我想你可以查看流量日志,如果你发现(通过ip地址)一些重复违规者,你可以将他们列入阻止访问服务器的黑名单。

要完全“下载”网站,你需要一个网络爬虫,除了跟踪URL外,还可以保存他们的内容。应用程序应能够:

  • 解析“根”url
  • 标识指向同一域中其他页面的所有链接
  • 访问并下载这些以及这些子页面中包含的所有内容
  • 记住哪些链接已经被解析,以避免循环
搜索“网络爬虫”应该会给你提供大量的例子

我不知道你可以采取什么对策来避免这种情况:在大多数情况下,你希望机器人抓取你的网站,因为这是搜索引擎了解你网站的方式


我想你可以查看流量日志,如果你发现(通过ip地址)一些重复违规者,你可以将他们列入阻止访问服务器的黑名单。

好的,逐个回答你的问题;您如何知道站点上存在“隐藏”(未链接)目录?你不知道,但是你可以检查最常见的目录名,不管它们返回HTTP 200还是404。。。有了几个线程,你甚至可以一分钟检查数千个。也就是说,你应该总是考虑你在特定网站上的请求量和它处理的流量,因为对于中小型网站来说,这可能会导致连接问题,甚至是一个短的DOS,当然这是不可取的。此外,您还可以使用搜索引擎搜索未链接的内容,这些内容可能是搜索引擎在意外事件中发现的,也可能是从其他网站上找到的链接等(例如,google site:targetsite.com将列出所有索引页面)。 你如何下载一个网站的所有页面已经得到了回答,基本上你去基本链接,解析html中的链接、图像和其他指向现场内容的内容,并遵循它。进一步解构指向其目录的链接并检查索引。您还将强制使用公共目录和文件名

除非你限制用户体验,否则你真的无法有效地抵御机器人。例如,您可以限制每分钟的请求数;但是如果你有一个ajax站点,一个普通用户也会产生大量的请求,所以这真的不是一个好办法。您可以检查“用户代理”和“仅白名单”的“常规”浏览器,但是大多数刮擦脚本将自己标识为常规浏览器,因此这也不会对您有多大帮助。最后,你可以将IP列入黑名单,但是这不是很有效,有很多代理、洋葱路由和其他方法可以改变你的IP

只有当a)在服务器配置中没有禁止目录列表,并且b)没有默认的索引文件(在apache index.html或index.php上默认)时,才能获得目录列表

实际上,最好不要让scraper变得更容易,因此请确保您的网站搜索功能已被正确清理(它不会在空查询中返回所有记录,如果您使用的是
mysql语法,它会过滤%符号…)。当然,如果合适的话,可以使用CAPTCHA,但是必须正确地执行,而不是简单的“what is 2+2”或两个普通字体的普通背景字母

另一个防止刮取的保护措施可能是使用referer检查来允许访问网站的某些部分;不过,最好是禁止访问您不希望在服务器端公开的网站的任何部分(例如使用
.htaccess


最后,根据我的经验,scraper只具有基本的js解析功能,因此实现某种形式的检入javascript是可行的,但是在这里,您也将排除所有关闭js(以及noscript或类似浏览器插件)或使用过时浏览器的web访问者

好的,请逐一回答您的问题;您如何知道站点上存在“隐藏”(未链接)目录?你不知道,但是你可以检查最常见的目录名,不管它们返回HTTP 200还是404。。。有了几个线程,你甚至可以一分钟检查数千个。也就是说,你应该总是考虑你在特定网站上的请求量和它处理的流量,因为对于中小型网站来说,这可能会导致连接问题,甚至是一个短的DOS,当然这是不可取的。您还可以使用搜索引擎搜索未链接的内容,它可能已经被发现