🌐 第四章 Web网站的运行原理
📄 一句话概括

公司能审核你上过哪些网站,靠的不是偷偷装了监视软件,而是"你所有的网页请求本来就要经过它那一道门"——这台门就是 4.8 讲的正向代理。它把出口收成一个点之后,天然就拿到了三件东西:记录(谁·何时·访问了哪个域名,日志还能留存备查)、管控(按名单放行或拦下,按人按部门分策略)、统计(时长与流量)。但要记住它的能见度有一条硬边界:HTTP 明文下它连你的 URL 路径、查询串、Cookie、表单内容都看得见;HTTPS 加密之后它只剩"信封"——域名、时间、流量大小照旧知道,路径和正文看不到了。想突破这条边界,只有在每台电脑上装公司根证书做 SSL 解密,而这条路有明确的合规门槛。

📝 本节和前面几节的关系

4.8 讲的是代理"是什么"(站在应用层、替你去取、看得懂 HTTP),本节讲的是它在公司里"拿去干什么"。同一个东西的两副面孔:

  • 审计能看到哪些字段,完全由 URL 的结构和 HTTP 的规矩决定——所以 4.4 拆的那六段、4.5 讲的那张请求报文,就是这份审计表的"字段清单"
  • HTTPS 那扇门是 4.8 结尾留下的(CONNECT 隧道、加密为什么让代理失明),本节把它正面讲了
  • 代理的日志之所以有意义,是因为它收的是自己的员工、自己的出口——这是 1.3 那张公司网络图给的便利

一、为什么"审核上网"这件事,一定要先有代理

先问一个根本问题:公司凭什么知道你在上班时间逛了什么网站?

答案朴素得有点意外:不是它有什么特别的手段,而是你上网的每一趟车,本来都要从它门口过。

回顾一下公司网络长什么样(收 1.3):

  员工电脑 ──┐
  员工电脑 ──┼──→ [ 公司内部 LAN ] ──→ [ 出口 ] ──→ 互联网
  员工电脑 ──┘                            ↑
                                    所有流量都必须经过这一个点

公司内部用的是私有地址(收 3.13),要出门必须换成全局地址(收 3.14)。出口只有一个——这是公司网络的设计决定的,不是谁额外加的。

代理服务器就装在这个出口上。于是就出现了这样一条逻辑:

📝 代理能审核,不是因为它聪明,是因为它"站在唯一的路口上"

收口 → 收口之后就有了唯一的记录点。

如果每台电脑各拉一根宽带,谁也管不了——所以企业做的第一件事是"把出口收成一个点",而这个点就是代理(或兼着代理功能的设备)。

这也解释了为什么手机连上公司 Wi-Fi 之后,同样在这套审核范围内:它走的是同一个出口。

二、"审核"到底审什么——四层能见度

审核不是一件事,是从粗到细的四层。越往下走,能看到的越细,但离开加密的保护也越近:

层次 审什么 靠什么看到 举例
第一层 访问了哪个网站 请求行里的主机名(明文 HTTP 的完整 URL / HTTPS 的 CONNECT 行) 上班时间在逛购物网站
第二层 什么时候、多久、多少流量 连接建立与断开的时间、字节计数 凌晨 2 点有台机器持续往外传了 5 GB
第三层 看了哪些具体页面 明文 HTTP 时的 URL 路径与查询串 搜索框里搜了"某某公司 面试"(明文下能看到,HTTPS 下看不到)
第四层 页面里是什么内容 明文正文;HTTPS 需 SSL 解密 把内部设计文件贴到了外部网盘

第一、二层在 HTTPS 时代照样有效;第三、四层只剩 HTTP 明文站点了。这个分层是本节最该记住的骨架——下面几节都在这个骨架上展开。

三、两种审核方式:事后看,还是事前拦

3.1 事后审计——靠日志

代理每处理一次请求,都能往日志里写一行:时间、来源机器(或账号)、目标主机、路径、结果、流量大小。

它的用途:

📝 这和 1.7 是同一件事

收 1.7 讲过服务器管理三件事:部署、监控、备份。"记录日志"就是监控那一条;而"日志要能查得到、留得住",就是备份那一条。审计系统本身也是一套要被管理的系统。

3.2 事前管控——靠名单和策略

日志是"回头查",管控是"当场拦"。常见三种:

做法 怎么运作 特点
黑名单 已知的不良站点名单,命中就拦 灵活,但名单永远滞后于新站点
白名单 只放行名单内的,其余全拦 最严,但容易误伤正常业务网站
分类 + 分人策略 按类别(购物/游戏/视频/招聘)+ 按部门给不同规则 现实里最常见:研发能上技术文档站,财务不放开网银以外的

真实企业里最常见的形态是两条一起用:策略挡在前面(当场拦),日志记在后面(事后查)。

四、代理审核 vs 防火墙审核(本节最容易混的一处)

这也是 4.8 那张表的一个延伸。两者的差别不在"谁更厉害",而在看的东西根本不是一个层面的:

防火墙 代理服务器
在哪一层 网络层 / 传输层 应用层
看什么 IP 地址、端口号 域名、URL、路径、内容
能区分同一个 IP 上的两个网站吗 不能(都是同一个 IP) 能(域名写在请求里)
能区分同一个网站的两个页面吗 不能 明文时能(路径写在请求行里)
拦什么 拦 IP、拦端口 拦域名、拦路径、拦关键词、按类别拦
能不能做缓存 不能 能(收 4.6)

一句话分:

防火墙看"去哪儿、走哪个门";代理看"进了哪个房间、拿了什么东西"。

现实里现在很少是两台独立设备了——通常叫上网行为管理或下一代防火墙(NGFW),一台机器同时干这两层的活。但原理还是那两层,别被产品名字绕晕。

五、HTTPS 带来的那一刀(本节重点)

4.8 结尾留了句话:加密让代理失明。这里把它讲透。

回想 HTTPS 穿过代理的样子(收 4.8):

浏览器 ──→ 代理:  CONNECT example.com:443
代理   ──→ 网站:  (建立隧道)
之后所有字节都是加密的 ──→ 代理只能看字节流,看不懂内容

于是审核的能见度被切成两半:

还能知道 不知道了
HTTPS 之下 域名(CONNECT 那行里写着)、访问时间、时长、流量大小、访问频次 URL 路径、查询串、Cookie、表单内容、页面正文
HTTP 明文 上面全部 + 路径、查询串、Cookie、表单、正文 —— (本来就没有)

结论很实际:在今天的网络里,"你访问了哪个网站"基本瞒不住;"你具体看了哪一页、填了什么"在 HTTPS 下看不到。

5.1 那些"绕过"的想法,为什么多半不管用

这是很多人凭直觉会想的路子,逐条对照上面的表就清楚了:

想法 为什么不灵
用 IP 直连,不用域名 一个 IP 上常常挂着很多网站(Host 头才决定给你哪个,收 4.4);直连 IP 大多报错。而且流量照样经过代理
换 DNS(DoH / DoT) DNS 只负责"域名换 IP"(收 3.21)。DNS 那一步藏住了,代理这里的 CONNECT 行照样写着域名
开无痕模式 无痕只管你这台电脑不留记录。代理那侧的日志一条不少(这也是 4.7 说的:Cookie 存在你这边,但审计记录存在它那边)
用手机热点 确实绕过了公司出口——但违反公司规定;而且公司配发的手机常常装了管理配置(MDM),策略照样下发
换个浏览器 / 装个插件 换的是客户端软件,走的是同一个出口。代理不关心你用什么浏览器

5.2 想突破这条边界:SSL 解密(中间人)

想看到 HTTPS 里的内容,只有一招:代理当着你的面把加密拆开。

浏览器 ──(公司证书)──→ 代理 ──(真证书)──→ 网站
                      ↑ 这里解密 → 检查 → 再加密发出去

它怎么做到?途径是每台电脑上都装了公司的根证书:

  1. 代理给浏览器的证书,是用公司自己的 CA 签发的(因为你的电脑信任了这个根证书,所以浏览器不报警)
  2. 代理用真证书去连真网站,两边各谈一次加密
  3. 中间明文过一遍——这就是它能审内容的原因

技术上的痕迹很好认:

⚠️ 这条路有合规门槛,不是想装就装

内容级监控比"记域名"敏感得多,涉及员工个人信息处理。合规上通常要求:

  • 事先明确告知(员工手册、入职协议、内部制度公示),而不是悄悄上线
  • 目的正当、范围最小:为了安全与合规,不是"看看大家在干嘛"
  • 有期限、有权限:日志不是永久堆着,也不是谁都能翻

换句话说:企业有网络管理权,但这份权利是有边界、有程序的。

六、代理装在哪里:本地部署 vs 云代理(收 1.8 的老账)

本地部署代理 云代理 / 安全访问服务
装在哪 公司机房里,接在内网出口 云端,员工无论在哪都连过去
管得到谁 在办公室连内网的人 在家、出差、连手机热点的人也管得到
谁维护 自己养设备、自己升级 厂商维护,按量或按人付费
灵活度 / 可控度 高(能随便定制) 低(跟着厂商的能力走)

这正好是 1.8 那条老规矩的又一次出现:租得越多、管得越少。云代理把"出口"从一个固定的地点变成了一个服务——代价是策略能力受厂商限制。

七、站到员工这一侧:几句实在话

这一节讲的是"公司怎么审核",但真正该带走的是这几条判断:

  1. 无痕 ≠ 隐身。它清的是本机的浏览历史和 Cookie,管不到出口那台机器的日志。
  2. 公司的管理边界是"设备与出口",不是"你的身份"。用公司网络、公司设备处理私事,就落在这套边界里;要分清楚,用自己的流量、自己的设备处理私事——这不是躲,是把职责和私事的边界划清楚。
  3. "能记"不等于"随便记"。日志本身也是个人信息,也是证据:留存期限、访问权限、销毁流程,都该有规矩。一个公司怎么对待自己的日志,其实反映了它怎么对待员工。
  4. HTTPS 已经在事实上保护了绝大多数隐私内容。今天主流网站几乎全站 HTTPS,公司代理能拿到的多半只是"访问了哪个域名"这一层——别再以为公司在读你发的每一条消息,那不是常态。

八、动手 Demo(Demo46):在本机搭一套最小版"上网审计"

思路:把 4.8 那个只会说一句话的迷你代理,升级成带时间戳、会写日志的版本。它依然不真转发,只做一件事:把每一次请求的时间和目标记下来——这恰好就是审计系统最核心的那一块。

第 1 步 · 新建 mini_audit.py

import socket
import threading
import datetime


def handle(conn):
    data = conn.recv(65535)
    if not data:
        conn.close()
        return

    first = data.split(b"\r\n", 1)[0].decode("utf-8", "ignore")
    now = datetime.datetime.now().strftime("%H:%M:%S")
    line = "[" + now + "] " + first

    print(line)                                    # 屏幕上实时看到
    with open("audit.log", "a", encoding="utf-8") as f:
        f.write(line + "\n")                       # 落盘留存

    if first.startswith("CONNECT"):
        # HTTPS:代理这边根本没有路径可看,只能拒绝隧道的建立
        conn.sendall(b"HTTP/1.1 502 Bad Gateway\r\n\r\n")
    else:
        body = "这部代理只干一件事:把看到的第一行记下来。\n请去看脚本窗口和 audit.log。\n".encode("utf-8")
        head = ("HTTP/1.1 200 OK\r\n"
                "Content-Type: text/plain; charset=utf-8\r\n"
                "Content-Length: " + str(len(body)) + "\r\n\r\n")
        conn.sendall(head.encode() + body)

    conn.close()


s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(("127.0.0.1", 8888))
s.listen(5)
print("审计代理已在 127.0.0.1:8888 等你(Ctrl+C 退出)")

while True:
    conn, _ = s.accept()
    threading.Thread(target=handle, args=(conn,), daemon=True).start()

第 2 步 · 起起来

python mini_audit.py

第 3 步 · 走一次明文 HTTP(看得见全部)

curl -x http://127.0.0.1:8888 "http://example.com/a/b?q=1"

日志里会出现:

[21:03:14] GET http://example.com/a/b?q=1 HTTP/1.1

域名、路径、查询串,一字不落。 这就是 4.4 讲的"路径+查询串装进请求行"在审计视角下的样子。

第 4 步 · 走一次 HTTPS(只剩信封)

curl -x http://127.0.0.1:8888 https://example.com

日志里会出现:

[21:03:20] CONNECT example.com:443 HTTP/1.1

这就是本节的核心现场。 两行日志放在一起看,差别赤裸裸:一条有路径和查询串,另一条只有一个主机名加端口。

curl 会报"502"——这是正常的:我们的脚本没有真的去开隧道,只把这一行记下来了。

第 5 步 · 打开 audit.log

type audit.log

按时间排下来的这几行,就是一份最小版的上网审计记录。企业那套设备记的也是这些字段,只是更细、更全、能查得更久。

第 6 步 · 用浏览器走一次,看日志"刷屏"

把浏览器代理指到 127.0.0.1:8888,访问一个 http:// 开头的页面(做完立刻把代理设置关掉)。

脚本窗口会一下子打印好多行——每一个 CSS、每一个 JS、每一张图片都是单独一行。

这不是故障,这是 4.1 那句"一次打开网页从来不是一次请求"在审计侧的再次显形:日志的量级不是按"次"算的,是按"请求"算的。这也解释了为什么审计系统的存储规划,往往比想象中大得多。

九、30 秒实验

  1. 30 秒:type audit.log —— 一眼看完那份记录,找找有没有"路径"。
  2. 30 秒:把第 3 步和第 4 步的两行并排对齐看 —— 差在哪儿?就差在"有没有路径"。这一眼就是"HTTP 明文 vs HTTPS"的全部差别。
  3. 30 秒:用浏览器走一次(记得改回代理设置)—— 看日志一屏刷出多少行,感受一下"一次点击 = 几十条记录"。

十、常见误区

  1. "无痕模式能避开公司审计。" —— 无痕只清本机记录;代理那侧的日志一条不少(收 4.7 同一规律:记录在哪一侧,就归哪一侧管)。
  2. "公司只能看到我访问的域名,看不到具体页面。" —— 明文 HTTP 下能看到路径和查询串(4.4 那条"路径+查询串装进请求行")。只有 HTTPS 才退化成"只看得到域名"。
  3. "开了 HTTPS,公司就彻底看不见了。" —— 域名、时间、时长、流量大小照旧全暴露;装了根证书还能拆开看内容。
  4. "换个 DNS 就查不到我上了哪个站。" —— DNS 只管"域名换 IP"(收 3.21)。CONNECT 行里的域名照样露。
  5. "用了代理就查不到是谁。" —— 恰好反了:代理的日志通常精确到哪台机器、哪个账号。代理"匿名"那面是相对外部网站而言的(收 4.8)。
  6. "代理和防火墙是一回事。" —— 防火墙看 IP / 端口(网络层),代理看域名 / URL / 内容(应用层)。同一个 IP 上的多个网站,防火墙分不清,代理能。
  7. "SSL 解密想装就装。" —— 内容级监控涉及个人信息处理,需要事先告知、目的正当、范围最小、有期限有权限。
  8. "手机连公司 Wi-Fi 就不受管。" —— 走的是同一个出口,域名层面照样看得见。
  9. "公司审计员工上网是违法的。" —— 在合理必要、事先告知、用于内部管理的前提下,企业有网络管理权;但内容级监控(SSL 解密)的合规要求高得多,两者不是一回事。
  10. "日志记了就记了,留着总没坏处。" —— 日志本身既是个人信息也是证据:无期限堆积既是安全风险,也是合规风险。该有的规矩是留存期限、访问权限、到期销毁。

十一、动手自测

❓ 自测一下
  1. 公司为什么能审核员工的上网记录?它的"资格"从哪来?
  2. 审计的能见度分四层,分别是哪四层?哪两层在 HTTPS 之下仍然有效?
  3. 事后审计和事前管控分别靠什么?黑名单和白名单各自的弱点是什么?
  4. 同一个 IP 上挂着两个网站,防火墙能区分吗?代理能吗?为什么?
  5. HTTPS 穿过代理时,代理还能知道什么、不知道什么?
  6. "换 DNS 就能藏住访问了哪个站"这个想法错在哪?
  7. SSL 解密靠什么手段做到?为什么浏览器不报警?
  8. SSL 解密在合规上有什么门槛?
  9. 云代理比本地代理多管到了谁?这对应 1.8 的哪条规律?
  10. 为什么说"日志本身也是个人信息"?

答案: ① 因为公司内部的出口只有一个(收 1.3):所有网页请求都要经过出口上的那台代理(收 4.8)。"收口"就产生了唯一的记录点——不是它手段特别,是位置特别。② 四层:访问了哪个网站 / 什么时间、多久、多少流量 / 看了哪些具体页面 / 页面里是什么内容。在 HTTPS 之下,前两层仍然有效(域名、时间、流量大小都还在),后两层只剩 HTTP 明文站点。③ 事后审计靠日志(追责、合规留存、发现异常);事前管控靠名单与策略。黑名单的弱点是名单永远滞后于新站点;白名单的弱点是容易误伤正常业务网站。④ 防火墙区分不了——它只看 IP 和端口,同一个 IP 上的两个网站对它是同一个目标;代理能区分,因为域名写在请求里(这也正是 4.8 说的"它看得懂 HTTP")。⑤ 能知道:域名(CONNECT 那行里)、访问时间、时长、流量大小、频次;不能知道:URL 路径、查询串、Cookie、表单内容、正文。⑥ DNS 只解决"域名换 IP"(收 3.21),藏住的是解析这一步;而代理看到的 CONNECT example.com:443 里,域名是明文写在请求里的。⑦ 通过在每台电脑上安装公司的根证书:代理用自家 CA 签发的证书给浏览器,浏览器因为信任这个根证书所以不报警;代理再用真证书连真网站,中间明文过一遍。⑧ 需要事先明确告知(制度/协议)、目的正当、范围最小、有期限有权限。企业有网络管理权,但内容级监控的门槛高得多。⑨ 多管到了在家、出差、连手机热点的人(把出口搬到云端,不再局限于办公室内网)。对应 1.8 的"租得越多、管得越少":省了维护,但策略能力受厂商限制。⑩ 因为它记录了具体某个人的行为轨迹,属于个人信息;同时它又是证据。所以要有留存期限、访问权限与销毁流程——否则从"管理工具"变成"风险源"。

十二、下一步学什么

相关笔记