我们的 ISP 还托管我们的外部 DNS。默认情况下,它们包含 localhost 的条目。
例如:localhost.example.com.86400 IN A 127.0.0.1
当我要求他们删除它时,他们给我找麻烦并说这只是 Bind 的工作方式。
我尝试研究一下为什么要包含这个条目,但结果不尽如人意。我确实发现至少有一个地方认为这是一个可能的 XSS 攻击媒介。它似乎相当常见,所以我在 Alexa 的前 20 个网站域名上进行了查找,大多数网站都没有这样的条目,但有几个有。其他几个网站有一个条目,但它们没有指向 127.0.0.1,而是指向另一个全球可路由的 IP 地址。
那么,为什么我要在我的域的区域中拥有 locahost?没有它会有什么问题吗?有没有关于这方面的最佳实践?这确实是我不知道的默认绑定吗?
谢谢
答案1
localhost.example.com
有时会包含在内部 DNS 服务器中,以防止“localhost”请求泄漏到互联网(例如,当 John Smithhttp://localhost/
在他的浏览器中输入并且由于某种原因他的解析器没有查找 hosts 文件时,附加他的搜索路径(example.com
)并开始询问名称服务器将其解析为什么)。
您不必拥有 localhost 条目(如果您的 ISP 认为这是“BIND 的工作方式”,那么他们要么被误导了,要么就是白痴:BIND 提供区域文件中的内容,如果他们删除该localhost
行,它将停止提供该记录)。作为一个免费示例,localhost.google.com
无法解析,我敢打赌该域的 NS 正在运行 BIND。
我从未想过 XSS 向量,但它确实令人担忧:localhost
在公共 DNS 中有一个条目意味着任何被黑客入侵的机器都可能“在你的域中”(通过在 127.0.0.1 上运行 Web 服务器)并可能做各种恶意的事情。这可能是删除该条目的充分理由。
答案2
假设您的内部名称解析能够正确处理名称解析,则任何针对 localhost 的 DNS 请求都不应发送到您的外部 DNS 提供商,因此这根本不是问题。
一个理由为什么有人会这样做,我能想到的,是如果有人曾经使用过一个 web 创作工具,该工具搞砸了对 http://localhost 的绝对引用,但这假设你的 ISP 也托管在他们的 DNS 盒上,并且可能性很小。
然而,RFC 1537 做指定:
关于是否要将本地域名附加到其中,已经进行了广泛的讨论。结论是“localhost。”是最好的解决方案;理由如下:
“localhost” 本身在某些系统上被使用并且有望工作。
将 127.0.0.1 转换为“localhost.my_domain”可能会导致某些软件在它不想连接的时候使用环回接口连接到自身。
请注意,所有包含主机的域都应具有“localhost”A 记录。
因此严格来说,您的 ISP 包含 localhost 是正确的,但使用完全限定名称是不正确的。
答案3
我不确定重点是什么...默认情况下,外部地址将被 hosts 文件覆盖,该文件几乎总是将 localhost 映射到 127.0.0.1。
不过,默认的 BIND 区域文件确实包含 localhost 区域。从来没想过这个。