返回概览 更多文章

网站能看到你的电脑名称吗?别被“主机名”骗了

你给笔记本起了个带个人信息的名字。后来,一个 IP 查询网站显示了“主机名”,或者一条登录提醒叫出了你的电脑名称,你开始怀疑:是不是每打开一个网站,对方都能拿到这个名字?

普通的公共网站,没有标准浏览器 API 可以读取你的 Windows 设备名称或 Mac 电脑名称。可隐私检测页面上有好几种东西都叫“名称”,指的却是不同的机器。一旦把它们混为一谈,一次平平无奇的网络查询,看起来就像有人翻了你的系统设置。

简而言之:普通网页没有标准 API 可以读取你的电脑名称或操作系统登录用户名。location.hostname 指的是网站;反向 DNS 查询得到的是公网 IP 对应的名称,前提是存在相应记录。文件选择框会暴露选中的文件名,但不会暴露完整的本地路径。不过,你主动分享的数据、局域网服务或企业管理的身份验证系统,仍然可能把名称交给网站。这些各有各的渠道,并不是浏览器里藏着一个读取名称的字段。

JavaScript 里的主机名,属于网站

打开本页的控制台,执行 location.hostname。在正式网站上,它返回 bscan.info;在本地预览里,它可能返回 localhost。两个结果都不是正在看网页的那台电脑的名字。它是页面 URL 的主机部分,Location API 文档写得很清楚。

HTTP 请求里的“Host”也容易造成同样的误会。Host: bscan.info 告诉服务器的是你请求了哪个网站。HTTP/2 和 HTTP/3 可以用 :authority 携带这项信息。它们标识的都是目的地,不是你的笔记本。HTTP 对 Host 和 authority 字段的定义说的就是这个意思。

试试下面的演示。前两个值直接读自你的浏览器。电脑名称那一行,说明的是标准浏览器 API 能暴露什么。它无法排除你通过其他途径分享信息的可能。

到底暴露了哪个名称?
location.hostname
正在等待浏览器读数
这是当前标签页里的网站,不是你的设备。
navigator.userAgent
正在等待浏览器读数
浏览器提供的软件描述。这段文字可以被改写。
你的本地电脑名称
网页没有对应的标准 API
这一行说明的是浏览器平台的能力边界,不代表泄露检测已经通过。

选中文件后,网页能拿到什么

下载无害的示例文件,再在下方选中它。演示只显示文件名和输入框的值,不会读取或上传文件内容。

下载无害示例文件
File.name
尚未选择文件
input.value
尚未选择文件
实时读数只留在本组件里。网页看得到选中的文件名,但看不到完整的本地路径。这些检查不会审查网络服务或企业管理的身份验证系统。

User-Agent 是浏览器提供的一段软件描述,可以包含操作系统系列和浏览器版本。它没有标准字段来存放你在设置里起的设备名称。不过,扩展或定制浏览器可能往里面加上别的文字,所以应当看看实际字符串,不要想当然地认为它绝不含个人信息。我们在为什么 User-Agent 和浏览器引擎会对不上一文中讲过,这些软件声明到底有多可靠。

公网 IP 的主机名,又是另一回事

服务器可以拿你这次连接的来源 IP 去做反向 DNS 查询。结果可能长得像 customer-203-0-113-8.isp.example,也可能是托管服务商的名称,或者什么都查不到。这里的字符串只是一个虚构的 DNS 记录示例。

反向 DNS 问的是:谁管理这个地址的反向 DNS 记录,给它公布了什么名称?它不会去问 Windows 或 macOS,你给机器起了什么名字。在使用 IPv4 NAT 的家庭网络里,几台设备可能共用一个公网地址。所以,不能把公网主机名当成打开网页的那台笔记本的名字。

但也别由此得出“主机名永远不可能标识一台机器”。一个组织可能有意为拥有公网地址的电脑公布一个有实际含义的名称,这条记录甚至可能和它的本地名称相同。关键在于结果从哪里来:它来自公开的 DNS 数据,不是某个能读取系统设置的标准网页 API。VPN 可以改变网站看到的连接地址,却不能证明网站是否已经从其他地方得到了你的信息。

上传文件会泄露 Windows 用户名吗?

C:\Users\Alice\Documents\invoice.pdf 这样的路径里有用户名。但普通的 HTML 单文件选择框不会把完整路径交给页面。输入框的 value 会使用 C:\fakepath\invoice.pdf 这样的隐私保护字符串,而 File.name 只有文件名,没有路径。MDN 解释过这个假路径;它不是一个需要删除的文件夹,也不是 Windows 出了错。

下载演示里的无害示例文件,再用选择框选中它,比较一下 input.value 和 File.name。在 Mac 上看见 Windows 格式的假路径,不代表网页检测到了 Windows。这个字符串的用途,就是藏住真正的目录结构。

文件名本身是可见的。如果你选中的是 Alice-Payroll-October.pdf,网页就能拿到这个名字。选中文件,也等于把读取文件内容的权限交给了页面;它不用等你再按一个“上传”按钮。本页的演示只显示文件名和输入框的值,从不读取内容,也不会把文件发到任何地方。

判断其他网站时,这个区别很要紧。本地预览功能可能只读取文件,不上传;另一个页面却可能在文件选中的那一刻就把它传走。文件夹选择器是另一项功能,还可能暴露所选文件夹内部的相对路径。假路径保护的是你完整的本地路径,并不保证选中的文件里没有个人信息。

谁真能知道你的电脑名称?

局域网和随便一个公共网站,能看到的东西不一样。设备名称可能出现在网络协议和服务发现过程中。RFC 8117 描述过这个隐私问题,其中就包括通过 DHCP 和多播 DNS 暴露的名称。所以,路由器的设备列表可能知道普通公共网页不知道的信息。但你打开了路由器管理页面,不等于其他网站也都拿到了路由器掌握的信息。

在企业内网中,配置了 Windows 身份验证的 Web 应用,可以用用户的 Windows 账号完成认证。微软的 Windows 身份验证指南介绍了它在企业内网中的用途。通过这套机制得到经过验证的账号名称,和任意脚本直接读取你的操作系统用户名,是两回事。公司门户也可以从自己的设备台账里调出设备详情。先弄清楚这个名称是由哪项集成提供的,再判断是不是浏览器泄露了它。

你也可能亲手把名称交出去。系统设置的截图可能露出设备名称,诊断日志可能包含主机名或用户主目录路径,文档可能带着作者姓名。即使网页没有通用的“读取电脑名称”功能,分享这些东西之前,你仍然得检查一下。

给电脑改名,不会重置浏览器身份

电脑改名后,账号仍然被认出来,一点也不奇怪。网站可以靠 cookie 或你的登录状态认出会话,也可以把浏览器特征拼成指纹。这些都不需要设备设置里显示的名字。网站为什么不需要 MAC 地址也能识别设备,也是同样的道理。

如果你不想在局域网里广播带个人信息的标签,把 Alice-Laptop 改成 Desktop 是有用的。但它不会清掉 cookie、改变登录状态,也不会换掉canvas 指纹所用的渲染特征。检测网站完全可以在不知道电脑名称的情况下认出你的浏览器。

如果工作需要管理客户账号,独立的浏览器配置文件,比给电脑改名更切题。Incogniton 是管理这类配置文件的一种工具。把它当作工作方式的选择就好;它并不保证上传的文档或已经登录的公司门户无法识别你。

先从你实际看到的那项结果查起。如果它是当前网站的域名,那它来自 URL。如果它像是网络服务商的名称,查查是不是反向 DNS。如果它含有你的姓名,检查你提供的文件名、账号或诊断数据。然后运行浏览器扫描,看看网页在不知道你给电脑起了什么昵称的情况下,还能读到哪些信号。

Incogniton 徽标

提升你的隐私保护

箭头