加密传输 + 完整性校验 + 身份验证
对请求数据签名,服务器验证签名,篡改后签名失效
// 客户端签名
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('签名验证失败,数据可能被篡改')
}
强制浏览器使用 HTTPS,防止 SSL 剥离攻击
// 响应头
Strict-Transport-Security: max-age=31536000; includeSubDomains
// 效果
1. 浏览器自动将 HTTP 请求升级为 HTTPS
2. 证书错误时拒绝连接(无法点击继续)
3. 预加载列表可防止首次访问被攻击
客户端预置服务器证书指纹,防止伪造证书
// 移动端实现
const expectedFingerprint = 'sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA='
func validateCertificate(cert) {
const fingerprint = sha256(cert.publicKey)
if (fingerprint !== expectedFingerprint) {
throw new Error('证书不匹配,可能存在中间人攻击')
}
}
| 措施 | 防护目标 | 实现方式 |
|---|---|---|
| HTTPS | 数据加密 | TLS 证书 |
| HSTS | 防 SSL 剥离 | 响应头 |
| 证书固定 | 防伪造证书 | 客户端校验 |
| 数字签名 | 数据完整性 | HMAC/RSA |
| 双向认证 | 身份验证 | 客户端证书 |