跳转至

中间人能知道我上什么网站吗?

声明

这是一篇抛砖引玉的讨论,适合至少是初次浏览过计算机网络的玩家观看,本文的很多观点可能是不成熟或者错误的,欢迎指正。

在我们平时上网的过程中,往往总有一些中间人,比如运营商、中间设备等,或多或少地能够窥探到我们的流量中的隐私信息。知乎上有个有趣的问题:网络运营商知道我上什么网站吗?。 关于这个问题,下面给出了不少回答,但是没有看到结合计算机网络教材进行条理化分析的内容,下面来作一点点尝试。

用户上网多多少少都会用到应用层,从应用层来入手分类讨论:

首先,如果使用 http 协议,由于 http 协议是明文传递 的,那么中间人自然也是知道得一清二楚;

接下来,考虑 https 协议,由于 https 协议对内容是加密 的(整个 HTTP 内容都会被加密,包括行、头、体),中间人能知道的信息一下子就少了很多。 关于 https 协议具体能保护哪些信息,可以查阅 what-information-does-https-protect 或者 are-https-urls-encrypted

但是,即使用了 https 协议,仍然有很多地方会露出蛛丝马迹,我们可以按照浏览器地址栏输入链接按下回车后的过程来逐步寻找哪些地方可能有问题:

  • 首先,浏览器需要先发起 DNS 请求。
    • DNS 请求时,用户计算机的 DNS 服务器默认是会配置成运营商提供的本地服务器,所以运营商可以通过本地服务器知道你最近解析了哪些域名(这个环节也常被利用来 DNS 污染和 DNS 劫持)。
    • 待分析 DoH 的情形。
  • 往下层经过 TCP 时,由于 TCP 报文里其实只有源目端口,并没有 IP 信息,所以这一层暂时是安全的。
  • 经过网络层时,IP 帧的首部里面有目的 IP,中间人有可能察觉你所访问的实际网站。
  • HTTPS 开始握手,此时的证书还是明文传递的,证书中也包含目标网站的信息(Subject)(在 Chrome 浏览器中,对应证书的"颁发对象" - "公用名")。
  • SSL 握手过程中,URL 前面的一部分(不包括路径和参数的那部分)其实也是明文的。

即使使用 https 协议,也存在被中间人窥探到一些痕迹的可能,不过,由于内容加密,相对原始的 http 要安全了很多。

无痕模式能帮上忙吗?

如果使用浏览器的无痕模式,是不是就高枕无忧了呢? 考虑到不同浏览器对无痕模式的实现可能有所不同,这里参考 Chrome 浏览器的解释:

  • Chrome 不会保存您的浏览记录、Cookie 和网站数据,也不会保存您在表单中填写的信息。
  • 您下载的文件和创建的书签将会保留下来。
  • 以下各方仍可看到您的活动:您访问的网站、您的雇主或学校、您的互联网服务提供商。

让我们来考虑一下 Chrome 开启无痕模式后,行为的一些变化:

  • 停止保存历史记录
    • 这一条对中间人影响不大,因为记录只是在本地保存。
  • Cookie 不会被持久化保存
    • 下一次打开浏览器时,Cookie 就会丢失(注意不是停止记录 Cookie,而只是退出时删除,否则基于 Cookie 的登录活动就根本没法完成了)。某种意义上,如果中间人使用 Cookie 来追踪和定位一个用户,那开启无痕确实有可能会增加一些难度;但是如前面所分析的各种活动中泄露出去的 IP 地址的情形并没有改变,所以基本上中间人仍旧可以看到你在访问什么。

因此,Chrome 的无痕模式整体上更接近于是 防止目标网站对你进行持续地跟踪和画像,而对于防范中间人的窥探影响并不大。Chrome 的解释也确认了诸如雇主、互联网服务提供商这些组织仍然可以看到你在干什么。

评论