本地安全处理 JSON 和 PDF,核心是四个基本原则:不上传、先脱敏、保留原件、处理后验证。尤其是涉及 API 接口返回值、代理或 VPN 配置、订阅信息、客户真实资料以及待公开的内容素材,绝对不要直接粘贴到不明来源的在线格式化工具或云端 AI 对话框中。
核心安全流程体系
建议团队和个人将每次敏感数据处理操作,固定为标准化的 5 步流程:
- 建立副本:原始 JSON / PDF 文件只读本地归档,所有编辑、脱敏与测试均在副本上进行。
- 离线与端侧处理:优先使用本机应用(VS Code、VSCodium)、命令行(jq、Python)或经过技术验证的纯浏览器端本地运行工具(如 DailyToolbox)。
- 先脱敏再对外分享:彻底删除密钥、账号、地址、手机号等敏感字段;PDF 必须执行**真正的“应用修订(Apply Redaction)”**彻底抹除底层对象,绝不能简单画黑色矩形覆盖。
- 重新打开多维验证:用全新阅读器重新打开,检查输出文件是否仍含隐藏图层、附件、批注、元数据或可被复制的原文。
- 安全传输与存储:敏感原件保存在加密磁盘或加密容器中;对外分发时,通过端到端加密渠道发送,并分渠道传输解密密码。
OWASP 核心安全原则: 最安全的敏感数据处理方式是**“不记录、不暴露”;若确实因排错需要公开结构,应采用删减(Deletion)、掩码(Masking)、哈希(Hashing)或令牌化(Tokenization)**,而不是保留完整原值。
一、 JSON 本地安全格式化与脱敏
1. 工具选型与原则
对于 JSON 数据,最稳妥的方案是本机编辑器与脚本工具:
- VS Code / VSCodium:适合断网环境下可视化查看、格式化、全局搜索和正则批量替换。
- jq:Linux / macOS 终端下最强大的命令行 JSON 筛选、格式化、字段删除与批量清洗工具。
- Python (json 库):适合复杂业务逻辑处理、结构递归解析以及**字段白名单(Whitelist)**导出。
- 浏览器纯本地工具(Client-Side Tools):仅限明确承诺并在 DevTools 中可验证为“纯前端 Web Crypto / WebAssembly 计算、零网络上传”的工具(如 DailyToolbox JSON Formatter)。
⚠️ 高危警告:切勿将 API Key、Bearer Token、Session Cookie、OAuth Refresh Token、数据库密码、代理订阅链接或真实手机号上传至带有云端日志记录的在线格式化器。OWASP 也明确建议避免在不安全的位置(如不透明的第三方平台)托管凭证。
2. 常见敏感字段清单
常见需在对外分享前删除或脱敏的字段名:
password
passwd
secret
apiKey
api_key
token
access_token
refresh_token
authorization
cookie
private_key
client_secret
webhook
email
phone
address
id_number
ssn
credit_card
注意:在代理、VPN 或云计算配置中,endpoint、server、host、uuid、subscription、remarks 也同样构成敏感网络拓扑与运营信息。
3. 用 jq 进行命令行安全脱敏与验证
基础格式化(生成美化副本):
jq . raw.json > formatted.json
黑名单删除指定敏感字段:
jq 'del(
.password,
.api_key,
.apiKey,
.token,
.access_token,
.refresh_token,
.client_secret,
.private_key,
.authorization,
.cookie
)' raw.json > sanitized.json
字段值掩码替换(保留数据结构):
jq '
.api_key = "[REDACTED]"
| .token = "[REDACTED]"
| .email = "[REDACTED]"
| .phone = "[REDACTED]"
' raw.json > sanitized.json
递归删除深层嵌套中的同名敏感字段:
jq '
walk(
if type == "object" then
del(
.password, .passwd, .secret, .api_key, .apiKey,
.token, .access_token, .refresh_token, .private_key,
.client_secret, .authorization, .cookie
)
else .
end
)
' raw.json > sanitized.json
处理后的本地安全扫描核验:
grep -Ein 'api[_-]?key|token|secret|password|authorization|cookie|private.?key|bearer' sanitized.json
若 grep 返回为空,说明常见敏感字样未直接出现;仍需人工抽查语义,避免敏感值存放在 value、config、credentials 等通用字段中。
4. 用 Python 做字段白名单(更安全的工程方案)
对外分享 JSON 时,白名单导出(Allowlist)永远比黑名单删除更安全:只允许明确安全的字段输出。
import json
# 严格定义允许对外公开的字段
allowed_keys = {"title", "date", "language", "summary", "tags"}
with open("raw.json", "r", encoding="utf-8") as f:
data = json.load(f)
# 仅抽取白名单字段
if isinstance(data, list):
safe_data = [{k: item[k] for k in allowed_keys if k in item} for item in data]
else:
safe_data = {k: data[k] for k in allowed_keys if k in data}
with open("public_sanitized.json", "w", encoding="utf-8") as f:
json.dump(safe_data, f, ensure_ascii=False, indent=2)
二、 PDF 本地安全处理与防泄露
PDF 的安全泄露往往并不在肉眼可见的正文,而隐藏在文档深处:
- 文档元数据 (Metadata):作者姓名、公司名、操作系统、软件版本、创建与修改时间戳、甚至原始文件存储路径。
- 底层文本层与伪打码:看似被黑色矩形或白色色块覆盖,但底层文字依然存在,任何人按
Ctrl+C或搜索框一搜即可提取。 - 隐藏图层与历史版本:多图层文档、历史修改批注、未合并的高亮线。
- 内嵌附件与脚本:隐藏挂载的源数据表格、JavaScript 宏。
1. 风险分级与处置方案推荐
| 业务场景 | 推荐处理方案 | 安全性与风险评估 |
|---|---|---|
| 只需去除基础元数据 | 本地用 ExifTool / pdfinfo 清理并核查 | 仅清理元数据,不移除正文内敏感词与隐藏附件 |
| 需要隐藏少量敏感段落 | 必须使用支持真实 Redaction(修订) 的 PDF 工具 | 严禁只画黑色矩形覆盖,必须真正抹除底层对象 |
| 只需发布纯视觉版 | 将每页栅格化为高分辨率图片,再由图片重组为 PDF | 彻底消除所有底层文字与隐藏层风险,但会失去文本搜索性 |
| 高敏感合同/法律/商业文件 | 专业桌面修订工具 + 清理隐藏对象 + 双人交叉人工复核 | 绝不上传至任何未经安全合规认定的云端在线转换站 |
2. 用 ExifTool 清理 PDF 隐私元数据
在终端中使用 ExifTool 检查并清空元数据:
# 1. 检查 PDF 包含哪些敏感系统与作者信息
exiftool original.pdf
pdfinfo original.pdf
# 2. 彻底清除所有非核心元数据
exiftool -all= -overwrite_original sanitized.pdf
⚠️ 重要提示:
exiftool -all=只清除文件头部的 Meta 信息,不会删除正文里的敏感字样或未真正删除的图层。
3. “打印为 PDF”的认知误区
很多人习惯用系统“打印 → 另存为 PDF”来做脱敏。必须明确它能做什么、不能做什么:
- 能做的:有时会压平部分交互表单、丢弃复杂的宏对象,生成相对紧凑的文件。
- 不能做的:绝不能消除被遮盖的文字! 如果只是在 Word 或 Acrobat 里用黑色色块挡住文字再打印,打印驱动依然会将色块和底层文字一同打包进新 PDF。
4. 专业的“修订 (Redact)”与“文档清理 (Sanitize)”标准操作
在专业 PDF 软件(如 Adobe Acrobat Pro、PDF24 Creator 或 LibreOffice Draw)中:
- 制作副本,原始文件只读归档。
- 使用 Redact(标记修订) 工具框选需要抹除的文字或证件区域。
- 执行 Apply Redactions(应用修订) —— 此时软件会彻底销毁被遮挡区域的底层文字向量和图像数据。
- 执行 Sanitize Document(清理文档) —— 清除隐藏附件、元数据、批注和书签。
- 另存为新文件后,用另一款独立的 PDF 阅读器打开,尝试全选复制(Ctrl+A / Ctrl+C),确认被抹除区域已成空白。
三、 对外分发前终极核验清单 (Checklist)
JSON 检查清单:
- 是否仅保留了业务必需的字段?
- 是否已彻底删除 API Key、Token、Cookie、密码、代理订阅链接和私钥?
- 是否使用
grep或编辑器全局搜索排查了敏感词全称? - 是否检查了嵌套数组、深层对象与 URL 查询参数中的敏感信息?
- 输出的文件是否格式合法,无多余语法错误?
PDF 检查清单:
- 是否全程在副本上处理,原件已安全只读备份?
- 敏感遮挡是否经过了“应用修订(Apply Redaction)”,而非伪遮罩?
- 是否清理了作者、公司、软件版本等系统元数据?
- 是否使用了第三方阅读器测试复制、搜索被遮盖词?
- 是否使用了中性脱敏文件名(如
quarterly-report-sanitized.pdf),避免原文件名泄露客户或项目代号?
四、 针对日常业务的敏感度分级建议
- 🟢 低敏感级(公开新闻素材、已发布开源 Markdown/代码、通用模板): 可以使用可信赖的纯浏览器本地工具(如 DailyToolbox 的在线 JSON 格式化、文本清洗、图片裁剪),秒级本地完成,无须打开重型应用。
- 🟡 中敏感级(未公开脚本文案、排期表、非涉密 API 返回值): 优先使用本地 VS Code / jq 脚本处理;在对外分享给客户或合作伙伴前生成脱敏副本。
- 🔴 高敏感级(账号 Token、Cookie、代理节点订阅、身份证件、商业合同、支付数据): 坚决不放入任何在线工具、浏览器插件或通用云端 AI 对话框;必须在离线断网环境中进行处理,并结合加密磁盘与真正的 PDF 修订抹除后归档。