我有一个“内容”网站,一些嫖客和419名骗子喜欢疯狂爬行,这也产生成本和性能问题。 :(我没有select:我需要阻止他们访问站点地图文件和索引。:(
我正在做与Facebook一样的:我dynamic生成一个站点地图索引(/ 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)文件。 我怎样才能保护他们? 即使他们有一个“难以猜到”的名字,他们可以很容易地find一个简单的谷歌查询(例如:“ 网站:stackoverflow.com filetype:xml ”),我有一个非常有限的访问.htaccess。
编辑:这不是一个服务器configuration问题。 首选语言是PHP。
编辑2:对不起,这是纯粹的程序化问题,但它已被转移,所以我不能closures/删除它。 🙁
您总是可以使用站点地图的URL,除了您明确提交的引擎之外,不会向任何人透露。
您应该使用白名单,并只允许良好的search引擎访问这些站点地图文件,如谷歌和必应。
这是一个巨大的问题,恐怕大多数人甚至在向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的话。 我有一种方法与Google技术人员聊天,所以它非常稳定。
请注意,我拥有并运营一个网站,每个月的浏览量大约为400万次,对我来说,这是一个非常重要的优先事项,因为我不希望我的数据很容易被取消。 另外,我在12个小时内使用了来自同一个IP的50个页面请求后使用了recaptcha,这真的很好地清除了漫游器。
我花了时间写这篇文章,因为我希望它能帮助别人,并且对我认为是一个基本上未被注意的问题进行阐述。
如何在飞行中不创buildsitemap.php? 而是每天重新生成一次(或者任何有意义的),并将其作为静态文件提供。 这样,即使每天有10,000个爬虫请求 – 那又如何呢?
你可以使用robots.txt来禁止文件,但你也可以阻止IP。 一个简单的方法是查看Web日志中的HTTP引用,然后编写一个cron作业,将这些IP(通过引用来源)join到hosts.deny中以供您的网站使用。