1. HTTP 明文风险:谁看得到

HTTP 是明文传输。 只要是 http 的请求(URL、表单、Cookie、Authorization 头),路径上的每个节点都能直接读取,不需要"破解"。

按风险等级的场景:

场景风险说明
公共 WiFi高同网任意设备可抓包(Wireshark 傻瓜式操作)
校园网/公司网关中-高网关天然记录经过的所有明文流量
运营商/ISP中可缓存、重定向、注入;国内有运营商插入广告/重定向的公开报道
DNS 污染/劫持高(主动攻击)域名解析到恶意 IP,用户在假服务器上输入密码,无法察觉

诚实评估: 普通人不会"被专人盯上抓密码",但明文流量被"路径上的节点记录"是结构性的常态。密码泄露往往不是被黑,而是流量被记录后某天被批量利用/撞库。

关键认知:base64 只是编码,不是加密。 浏览器弹窗里的 Authorization: Basic base64(user:password) 抓到包即可还原明文。

2. 为什么浏览器输入域名默认 http?

HTTP 规范规定:无协议前缀时默认 http://。

风险点: 即使网站随后 301 跳转到 https,第一个请求本身是明文发出的(首请求劫持)。你在未登录状态下发 http 请求通常不含密码,但登录页若本身是 http 就全裸了。

真正的危险不是"默认 http",而是:某些老站点/内网站点根本没有 https,或 https 之后不跳转,用户直接在 http 页面输入凭据。

3. HSTS(HTTP Strict Transport Security,HTTP 严格传输安全)

解决"用户手输 http / 首次请求明文"问题的机制。

工作原理

  1. 网站首次通过 https 访问时,响应头带上:

    Strict-Transport-Security: max-age=31536000; includeSubDomains
  2. 浏览器记住该域名策略(max-age 秒内有效)。
  3. 之后即使你输入 http://example.com,浏览器自动升级为 https,不再发明文请求。

HSTS Preload(预置名单)

HSTS 只在第一次 https 访问后才生效,首次仍可能明文。HSTS preload 解决这个冷启动问题:hstspreload.org 维护一个硬编码进浏览器的域名名单(Google/GitHub/支付宝等大站都在)。名单内的域名从第一次起就强制 https。

局限

  • 只在 HTTPS 站点声明 HSTS 才有效(老站永远保护不到)。
  • 用户清空浏览器数据会丢掉本地 HSTS 记录(但 preload 名单不丢)。
  • 内网 IP / 非标准端口很多浏览器不支持 HSTS。

4. HTTPS-First 模式(浏览器侧兜底)

浏览器默认先尝试 https,失败才回退 http(Chrome 默认开启)。与 HSTS 互补:HSTS 靠网站声明,HTTPS-First 靠浏览器主动。

5. 用户侧检查与操作

  1. 敏感操作(登录/支付)先确认地址栏有锁 → 是 https 才输密码。
  2. 书签保存完整 https:// 链接,不靠手输。
  3. 公共 WiFi 不连,或不在上面做登录/支付。
  4. 遇到"只有 http 没有 https"的站点:不输入凭据,或要求升级。
  5. 想强制自己的站点用 https:配 HSTS 头 + 提交 hstspreload.org,并保持 301 跳转。

关联: Htpasswd 基础鉴权 中"必须配合 HTTPS"的警告即源于本笔记第 1 节——Basic Auth 的 base64 凭据在裸 HTTP 下等于明文泄露。


本文归档于个人知识库 · 领域:CS & AI · 模块:04 Project_CS_AI/Network