【问题标题】:robots.txt disallow subdirectory without showing its name to robotsrobots.txt 不允许子目录不向机器人显示其名称
【发布时间】:2013-06-11 15:41:03
【问题描述】:
我遇到了 robots.txt 的问题。
我想禁止http://example.com/forbidden 并允许http://example.com 的任何其他子目录。通常这个语法是:
User-agent: *
Disallow: /forbidden/
但是,我不希望恶意机器人能够看到 /forbidden/ 目录存在 - 页面上没有任何链接到它,我希望它对所有人完全隐藏,除了那些首先知道它就在那里。
有没有办法做到这一点?我的第一个想法是在子目录本身上放置一个 robots.txt,但这没有任何效果。如果我不希望我的子目录被良性或恶意机器人索引,我是在 robots.txt 中列出它还是根本不列出或链接到它更安全?
【问题讨论】:
标签:
security
robots.txt
robot
【解决方案1】:
即使你没有链接到它,爬虫还是可以找到这些网址:
- 其他人可以链接到它
- 一些浏览器工具栏获取所有访问过的 URL 并将它们发送到搜索引擎
- 您的网址可能会出现在链接页面的(公开)Referer 日志中
- 等
所以你应该阻止他们。有两种变体(如果您不想使用访问控制):
(当然,这两种变体都只适用于礼貌的机器人)
您可以使用 robots.txt 而不使用完整的文件夹名称:
User-agent: *
Disallow: /fo
这将阻止 所有 以 fo 开头的 URL。当然,您必须找到一个与您仍希望被索引的其他 URL 不匹配的字符串。
但是,如果爬虫以某种方式找到了被阻止的页面(见上文),它可能仍会将 URL 添加到其索引中。 robots.txt 仅禁止抓取/索引页面内容,但不禁止使用/添加/链接 URL。
但是,使用meta-robots,您甚至可以禁止将 URL 编入索引。将此元素添加到您要阻止的页面的head:
<meta name="robots" content="noindex">
对于 HTML 以外的文件,有 HTTP 标头 X-Robots-Tag。
【解决方案2】:
最好不要在 robots.txt 中列出它。该文件纯粹是建议性的;表现良好的机器人会遵守它提出的请求,而粗鲁或恶意的机器人很可能会将其用作潜在有趣目标的列表。如果您的站点不包含指向/forbidden/ 目录的链接,那么在任何情况下都没有机器人会找到它,除非是执行相当于字典攻击的一个,这可以通过fail2ban 或一些类似的日志拖网渔船来解决;在这种情况下,包括 robots.txt 中的目录充其量不会有额外的好处,最坏的情况是让攻击者知道他可能找不到的东西的存在。