← 返回中间人攻击

🛡️ 实验三:防护方案

核心防护思路

加密传输 + 完整性校验 + 身份验证

🔐 HTTPS 加密

❌ HTTP 明文

POST /login HTTP/1.1 {"username":"alice","password":"secret123"} ⚠️ 攻击者可直接读取

✅ HTTPS 加密

TLS 1.3 Application Data 17 03 03 00 45 8a 2f 9c 3b e7 ... 🔒 加密数据,无法解读

✍️ 数字签名

对请求数据签名,服务器验证签名,篡改后签名失效

// 客户端签名
const data = { from: 'alice', to: 'bob', amount: 1000 }
const signature = HMAC(JSON.stringify(data), secretKey)

// 服务端验证
const expectedSig = HMAC(JSON.stringify(req.body), secretKey)
if (signature !== expectedSig) {
  throw new Error('签名验证失败,数据可能被篡改')
}

演示

点击按钮测试...

📜 HSTS (HTTP Strict Transport Security)

强制浏览器使用 HTTPS,防止 SSL 剥离攻击

// 响应头
Strict-Transport-Security: max-age=31536000; includeSubDomains

// 效果
1. 浏览器自动将 HTTP 请求升级为 HTTPS
2. 证书错误时拒绝连接(无法点击继续)
3. 预加载列表可防止首次访问被攻击

📌 证书固定 (Certificate Pinning)

客户端预置服务器证书指纹,防止伪造证书

// 移动端实现
const expectedFingerprint = 'sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA='

func validateCertificate(cert) {
  const fingerprint = sha256(cert.publicKey)
  if (fingerprint !== expectedFingerprint) {
    throw new Error('证书不匹配,可能存在中间人攻击')
  }
}

📋 防护检查清单

措施防护目标实现方式
HTTPS数据加密TLS 证书
HSTS防 SSL 剥离响应头
证书固定防伪造证书客户端校验
数字签名数据完整性HMAC/RSA
双向认证身份验证客户端证书