我不是在谈论提取文本或下载网页。 但我看到人们下载整个网站,例如,有一个名为“example”的目录,但它甚至没有链接到网站中,我怎么知道它在那里?如何下载网站的“所有”页面?我该如何预防?
例如,apache中有“目录列表”,如果已经有索引文件,如何获取root下的目录列表?
这个问题不是特定于语言的,我很乐意提供一个解释执行此操作的技术的链接或详细的答案。
好的,一一回答您的问题;您如何知道网站上有“隐藏”(未链接)目录?好吧,您不需要,但您可以检查最常见的目录名称,无论它们返回 HTTP 200 还是 404...通过几个线程,您将能够每分钟检查数千个。话虽这么说,您应该始终考虑对特定网站发出的请求量及其处理的流量,因为对于中小型网站,这可能会导致连接问题,甚至是短暂的 DoS,其中当然是不可取的。您也可以使用搜索引擎搜索未链接的内容,它可能是搜索引擎偶然发现的,也可能有来自其他站点的链接等(例如google site:targetsite.com将列出所有索引页)。 如何下载网站的所有页面已经得到解答,本质上是您转到基本链接,解析 html 中的链接、图像和其他指向现场内容的内容并关注它。此外,您还可以解构其目录的链接并检查索引。您还将暴力破解公共目录和文件名。
嗯,除非你限制用户体验,否则你确实无法有效地防御机器人。例如,您可以限制每分钟的请求数量;但是如果您有 ajax 站点,普通用户也会产生大量请求,因此这确实不是一个可行的方法。您只能检查用户代理并将“常规”浏览器列入白名单,但是大多数抓取脚本会将自己标识为常规浏览器,因此这对您也没有多大帮助。最后,您可以将 IP 列入黑名单,但这不是很有效,有很多代理、洋葱路由和其他方法可以更改您的 IP。
仅当a)服务器配置中未禁止并且b)没有默认索引文件(apache index.html或index.php上的默认值)时,您才会获得目录列表。
实际上,最好不要让抓取工具变得更容易,因此请确保您的网站搜索功能经过适当的清理等(它不会返回空查询的所有记录,如果您使用的是%符号,它会过滤%符号) LIKE
mysql 语法...)。当然,如果合适的话可以使用验证码,但它必须正确实施,而不是简单的“什么是 2 + 2”或几个带有纯背景的普通字体的字母。另一种防止抓取的保护措施可能是使用引用检查来允许访问网站的某些部分;但是,最好禁止访问您不希望在服务器端公开的网站的任何部分(例如使用
.htaccess
)。最后,根据我的经验,抓取工具只具有基本的 js 解析功能,因此在 javascript 中实现某种检查是可行的,但是在这里,您还需要排除所有关闭 js 的网络访问者(并且使用 noscript 或类似的浏览器插件)或使用过时的浏览器。
我不知道您可以采取哪些对策来避免这种情况:在大多数情况下,您希望机器人抓取您的网站,因为这是搜索引擎了解您网站的方式。
我想你可以查看流量日志,如果你(通过 IP 地址)识别出一些屡犯者,你可以将他们列入黑名单,阻止访问服务器。