👁️ 敏感信息泄露

Sensitive Data Exposure

📖 漏洞原理

⚠️ 重要误区

JWT 的 Payload 不是加密的,只是 Base64 编码!

任何人都可以解码查看内容,签名只保证数据未被篡改。

如果在 Payload 中存储敏感信息:

这些信息会被任何获取到 Token 的人看到!

🧪 漏洞演示

Step 1: 获取包含敏感信息的 Token

等待获取...

Step 2: 解码 Token

无需密钥,直接 Base64 解码:

Step 3: 手动解码验证

在浏览器控制台执行:

// 复制 Token 后执行
const token = 'YOUR_TOKEN_HERE'
const payload = token.split('.')[1]
console.log(JSON.parse(atob(payload)))

🔬 错误示例

// ❌ 错误:在 Payload 中存储敏感信息
const payload = {
  userId: 123,
  username: 'admin',
  password: 'admin123',      // 不应该放密码!
  creditCard: '4111-xxxx',   // 不应该放信用卡!
  ssn: '123-45-6789'         // 不应该放身份证!
}

// ✅ 正确:只存储必要的非敏感信息
const payload = {
  userId: 123,
  username: 'admin',
  role: 'admin',
  iat: 1234567890,
  exp: 1234571490
}

🛡️ 安全建议

📊 JWT vs JWE

特性JWT (JWS)JWE
Payload Base64 编码(可读) 加密(不可读)
用途 身份验证、授权 传输敏感数据
性能 较慢