Base64 不提供保密能力。拿到编码值的人不需要密码或密钥,就能还原原始字节。把凭据变成长字符串,只改变了外观。编码后的密钥、令牌和个人信息应与原文采用同样的保护措施。
编码、加密与签名解决不同问题
编码解决字节如何通过文本系统传输;加密通过密钥保护内容;认证标签或数字签名需要正确验证,才能支持来源与完整性判断;普通校验和主要用于发现意外损坏。仅有 Base64 不会获得这些保证。
JWT 的头部与载荷解码后可以阅读,但这不等于签名有效,也不等于发行者、受众或过期策略已经通过检查。不要把查看器显示的 JSON 直接作为授权依据。
解码内容应保持不可执行
载荷可能是 HTML、脚本、带活动内容的 SVG,或损坏文档。显示文字时使用 textContent,不要使用 innerHTML。不要运行解码代码,也不要把未知 SVG 直接插入页面。Data URI 声明的 MIME 类型由输入方决定,可能不真实;文件头只能提示格式,不能证明文件完整或安全。
const output = document.createElement('pre');
output.textContent = decodedText;
document.body.append(output); // 将标记显示为文字
在分配内存之前限制大小
浏览器可能同时保存输入字符串、解码字节和预览。应先检查大小,再处理数据;限定可接受格式,并支持取消耗时操作。失败信息应放在独立区域,避免被当作成功结果复制。
处理敏感内容前应查看工具的网络行为与保存政策。本地工具和服务器 API 的边界不同。避免把令牌放在网页 URL 中,防止进入历史记录、截图或访问日志。调试时优先使用结构相同的合成数据。编码歧义可参考 RFC 4648,完整协议仍需要独立的安全设计。