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