我不是在谈论提取文本或下载网页。但是我看到人们在下载整个网站,例如,有一个名为“ example”的目录,并且甚至没有链接到该网站中,我如何知道该目录呢?如何下载网站的“所有”页面?以及如何防范?
例如,在Apache中有“目录列表”,如果已经有索引文件,如何获取根目录下的目录列表?
这个问题不是特定于语言的,我很乐意仅提供一个说明实现此目的的技术的链接或一个详细的答案。
好吧,一个接一个地回答您的问题;您如何知道站点上有“隐藏”(未链接)目录?嗯,您没有,但是您可以检查最常用的目录名称,无论它们返回的是HTTP 200还是404 ...通过几个线程,您甚至可以每分钟检查数千次。话虽这么说,您应该始终考虑针对特定网站的请求量以及该网站处理的流量,因为对于中小型网站,这可能会导致连接问题或较短的DoS,当然是不可取的。您也可以使用搜索引擎搜索未链接的内容,它可能是偶然被搜索引擎发现的,可能是另一个网站的链接等。(例如google site:targetsite.com将列出所有索引页)。您已经下载了如何下载网站的所有页面的方法,实质上,您可以转到基本链接,解析html以获取指向站点内容的链接,图像和其他内容,然后按照它们进行操作。此外,您还可以解构指向其目录的链接并检查索引。您还将使用bruteforce通用目录和文件名。
好吧,除非您限制用户体验,否则您实际上无法有效防御僵尸程序。例如,您可以限制每分钟的请求数;但是如果您拥有ajax网站,那么普通用户也将产生大量请求,因此这绝对不是解决之道。您只能检查用户代理和白名单“常规”浏览器,但是大多数抓取脚本会将自己标识为常规浏览器,因此也无济于事。最后,您可以将IP列入黑名单,但这不是很有效,代理服务器,洋葱路由和其他更改IP的方法很多。
仅当a)服务器配置中未禁止它和b)没有默认的索引文件(apache index.html或index.php的默认文件)时,您才会获得目录列表。
实际上,最好不要使它变得更容易使用,因此请确保已正确清理了您的网站搜索功能等。(它不会在空查询中返回所有记录,如果您使用的是LIKE
mysql语法,它将过滤%符号...)。当然,如果合适的话,请使用CAPTCHA,但是必须正确实现,而不是简单的“ 2 + 2是什么”或具有普通背景的普通字体的几个字母。
防止抓取的另一种保护措施可能是使用引荐检查,以允许访问网站的某些部分;但是,最好只是禁止访问您不希望在服务器端公开的网站的任何部分(.htaccess
例如,使用)。
最后,根据我的经验,抓取工具将仅具有基本的js解析功能,因此实现某种形式的javascript签入是可行的,但是在这里,您还将排除所有已关闭js(以及使用noscript或类似浏览器插件)的Web访问者与过时的浏览器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句