WebSocket需应用层端到端加密(如AES-GCM)防窃听篡改重放,wss仅保传输安全;密钥动态下发、IV随机不复用、AAD含时间戳会话ID;敏感字段可追加数字签名;协议标准化+运行时防护+TLS基础防线缺一不可。

WebSocket 本身不加密消息内容,wss://只保障传输层 TLS 安全,应用层数据仍为明文。要防窃听、防篡改、防重放,必须在应用层做端到端加密 + 签名验证(或直接用带认证的加密模式,如 AES-GCM)。
用 Web Crypto API 实现 AES-GCM 加密与完整性校验
AES-GCM 是首选方案——它把加密和认证合二为一,一次调用即可保证机密性与完整性,无需额外签名步骤。
- 前端生成密钥:调用
window.crypto.subtle.generateKey("AES-GCM", true, ["encrypt", "decrypt"]),密钥绝不硬编码或存入 localStorage - 每次加密前生成 12 字节随机 IV:
crypto.getRandomValues(new Uint8Array(12)),IV 随密文一起发送,但不可复用 - 加密时传入附加数据(AAD),例如 JSON 序列化的 {“ts”:1742134620, “sid”:“abc123”},GCM 会将其纳入认证范围,防止篡改时间戳或会话 ID
- 服务端解密时必须使用相同密钥、IV 和 AAD;若
decrypt()抛错或返回空,说明密文被篡改或过期,直接丢弃
敏感字段单独签名(补充场景)
当部分字段需独立验证来源(比如用户操作指令需确认未被中间人替换),可在加密之外再加数字签名。适用于非对称场景,如后台用私钥签、前端用公钥验。
把任意文章或文档内容转换成精美的全屏翻页 HTML 演示文件(幻灯片风格)。当用户发来一篇文章、文档链接、Markdown 内容、或粘贴的文本,并且希望生成演示用的 HTML 时触发。支持任意内容来源:iWiki 链接、KM 链接、本地文件路径、直接粘贴的文本。生成的 HTML 文件保存到本地工作区,并通过企微直接发送给用户。触发词示例:帮我把这篇文章做成PPT、转成演示文档、生成HTML幻灯片、做个演示、转成可以演示的格式、article to deck、make a slide。
- 服务端用 ECDSA 或 RSA-PSS 对关键字段(如
{"action":"pay","amount":99.99,"nonce":"xyz"})签名,Base64 编码后附在消息体中 - 前端预先加载可信公钥(通过 HTTPS 获取并缓存,校验证书指纹),调用
subtle.verify()验证签名有效性 - 注意 nonce 必须单次有效、带服务端时间窗口校验,避免重放攻击
- 签名不替代加密——明文签名毫无意义,务必先加密再签名,或仅对加密后的摘要签名
前后端协议约定与运行时防护
加密逻辑再强,协议不统一或密钥泄露,整套机制就失效。
- 消息结构标准化:统一采用 JSON 封装,例如
{"iv":"base64","data":"base64","tag":"base64","ts":1742134620},服务端按字段解析,拒绝缺失或格式异常的消息 - 密钥动态下发:登录成功后,服务端生成会话级 AES 密钥,用 RSA-OAEP 加密后传给前端;前端用私钥解出并仅内存驻留,不用完不清零
- 禁用调试痕迹:生产环境移除所有
console.log,尤其不能输出 IV、密钥、解密后明文;启用 Subresource Integrity(SRI)校验引入的加密脚本 - 服务端必须校验 AAD 中的时间戳(允许 ±30 秒偏差)、会话 ID 是否匹配当前连接,并记录异常解密失败次数,触发限流或断连
别忽略传输层基础防线
应用层加密不是万能补丁,它依赖传输通道本身可信。
- 强制使用
wss://,Nginx 或 CDN 层启用 TLS 1.3,禁用 SHA-1、RC4、TLS 1.0/1.1 等弱协议 - WebSocket 握手请求中携带
X-Auth-Token或短期 JWT,服务端验证通过才升级连接 - 客户端可在
onopen后发起一次轻量 HTTPS 请求,比对服务器证书指纹,增强身份可信度 - 心跳帧(ping/pong)不加密可接受,但业务消息一律加密,避免敏感信息从非加密帧泄露
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










