我有一个“内容”网站,一些 leechers 和 419 诈骗者喜欢积极地抓取它,这也会产生成本和性能问题。:(我别无选择:我需要阻止他们访问站点地图文件和索引。:(
我的做法与 Facebook 相同:我即时生成站点地图索引 (/sitemap.php)。我使用 DNS 反向查找 (PHP) 和代理检查(与 Stackoverflow 相同)将“好”爬虫列入白名单。为了防止列入白名单的引擎公开站点地图索引内容,我添加了该标题(Stackoverflow 忘记了):
header('Content-type: application/xml; charset="UTF-8"', true);
header('Pragma: no-cache');
header('X-Robots-Tag: NOARCHIVE');
问题 1:我是否缺少保护站点地图索引文件的内容?
问题2:问题来自生成的静态站点地图(.xml.gz)文件。我该如何保护他们?即使它们有一个“难以猜测”的名称,也可以通过简单的谷歌查询(例如:“ site:stackoverflow.com filetype:xml ”)轻松找到它们,而且我对 .htaccess 的访问权限非常有限。
编辑:这不是服务器配置问题。首选语言是 PHP。
编辑 2:对不起,这是纯程序问题,但它已从 SO 转移,我无法关闭/删除它。:(
您始终可以使用站点地图的 URL,除了您将明确提交的引擎之外,该 URL 不会向其他任何人披露。
看看http://en.wikipedia.org/wiki/Sitemaps
您应该使用白名单,并且只允许良好的搜索引擎访问这些站点地图文件,例如 Google 和 Bing。
这是一个大问题,恐怕大多数人在向 Google 和 Bing 提交站点地图文件时甚至都不会考虑。我跟踪对我的 xml 站点地图文件的每个请求,并且自从我开始这样做(3 个月前)以来,我已经拒绝访问超过 6,500 个 IP。现在只有 Google、Bing 和其他一些人才能查看这些文件。
由于您使用的是白名单而不是黑名单,因此他们可以购买他们想要的所有代理,并且永远无法通过。此外,您还应该在将 IP 列入白名单之前执行反向 DNS 查找,以确保它们确实来自 Google 或 Bing。至于如何在 PHP 中做到这一点,我不知道,因为我们是微软商店,只做 ASP.NET 开发。我将首先获取 Google 和 Bing 运行其机器人的 IP 范围,然后当来自其中一个 IP 的请求进入时,执行 DNS 查找并确保“googlebot”或“msnbot”在 DNS 名称中,如果是,则对该名称执行反向 DNS 查找,以确保返回的 IP 地址与原始 IP 地址匹配。如果是,那么您可以安全地允许 IP 查看您的站点地图文件,如果不是,则拒绝访问并 404 小丑。
请注意,我拥有并运营着一个每月浏览量约为 4,000,000 次的网站,所以对我来说,这是一个非常重要的优先事项,因为我不希望我的数据很容易被废弃。此外,我在 12 小时内来自同一 IP 的 50 个页面请求后使用了 recaptcha,这确实可以很好地清除机器人。
我花时间写这篇文章,因为我希望它可以帮助其他人,并阐明我认为在很大程度上被忽视的问题。
不即时创建 sitemap.php怎么样?而是每天重新生成一次(或任何有意义的)并将其作为静态文件提供。这样,即使每天有 10,000 个爬虫请求它——那又如何?
您可以使用 robots.txt 禁止该文件,但您也可以阻止 IP。一个简单的方法是查看您的 Web 日志中的 HTTP 引荐来源网址,并编写一个 cron 作业来获取这些 IP(通过引荐来源网址)并将它们添加到您网站的 hosts.deny 中。