PDF 可以包含可执行代码。当文档打开、翻页、表单字段获得焦点时运行的 JavaScript。无需用户交互即可触发的自动操作。启动外部应用程序的隐藏对象。大多数 PDF 都不包含这些内容。当这样做时,它通常是合法的:自动计算总数的表单、基于用户输入进行导航的交互式文档、自动推进幻灯片的演示文稿。但脚本和自动化也可能是恶意的,被那些希望文档执行收件人不期望的操作的人隐藏起来。
从 PDF 中删除隐藏脚本和自动化是一项安全预防措施,在完全打开来自不受信任或未知来源的任何文档之前,以及您准备与可能使用较旧或安全性较低的 PDF 阅读器的收件人共享的任何文档时,应应用该预防措施。一旦您知道脚本可以隐藏在哪里,删除过程就很简单。
根据 SonicWall 的 2025 年威胁报告,基于 PDF 的恶意软件攻击在 2023 年至 2025 年间增加了 42%,其中嵌入式 JavaScript 是最常见的攻击媒介(SonicWall,“网络威胁报告”,2025 年)。大多数攻击的目标是使用过时的 PDF 阅读器(自动执行嵌入脚本)的用户。威胁是真实存在的,缓解措施也很简单:在脚本执行之前将其删除。

脚本和自动化隐藏在 PDF 中的位置
脚本可以附加到 PDF 结构中的多个位置。每个位置都是一个单独的藏身之处,必须单独检查和清洁。下表列出了常见位置以及每个位置中通常出现的自动化类型。
| 位置 | 触发事件 | 典型合法使用 | 恶意风险 |
|---|---|---|---|
| 文档级 | 文档打开、文档关闭、文档保存、文档打印 | 显示欢迎消息、验证打开的文档、跟踪文档打印时间 | 高:打开文档后,在用户看到任何内容之前,脚本立即执行 |
| 页面级 | 页面打开、页面关闭、页面可见 | 显示特定页面时触发动画或过渡 | Medium:当用户导航到特定页面时执行 |
| 表单字段级 | 视场聚焦、视场模糊、视场变化、视场验证、视场计算 | 自动计算总计、验证输入格式、自动格式化输入的数据 | Medium:在正常形式交互期间执行;可以捕获击键或修改输入的数据 |
| 链路层 | 链接点击、按钮按下、鼠标进入、鼠标退出 | 导航到 URL、提交表单数据、显示或隐藏内容 | 低:需要用户交互才能触发;可能会定向到恶意 URL |
尝试保护 PDF
无需安装。直接在您的浏览器中工作。
在处理之前检测脚本
在可以显示嵌入脚本的阅读器中打开 PDF。 Adobe Acrobat Pro 包含一个 JavaScript 编辑器,可列出文档中的所有脚本及其位置和触发事件。大多数基于浏览器的 PDF 阅读器不会执行脚本,这会在查看期间保护您的设备,但也不显示它们,这意味着您无法审核存在哪些脚本。如果您无法访问脚本审核工具,则假设来自不受信任来源的任何 PDF 都可能包含脚本。最安全的方法是主动删除所有脚本,而不是尝试确定每个脚本是否是良性的。您无法识别的脚本应被视为潜在恶意脚本。
对于未知脚本的PDF安全原则是删除,而不是评估。删除良性脚本的成本(通常是失去某些交互功能)远低于允许恶意脚本执行的成本。
使用基于浏览器的清理删除脚本
将 PDF 上传到基于浏览器的工具,该工具提供扁平化、清理或安全清理功能。这些操作删除所有交互元素:脚本、表单字段逻辑、嵌入操作和链接。输出是静态 PDF,显示相同的视觉内容,但不包含可执行代码。下载清理后的文件并通过在支持脚本的阅读器中打开它来进行验证,确认不存在任何脚本。 WukongPDF 处理 PDF 而不执行嵌入脚本。 Fix PDF平台在处理过程中去除交互元素,产生干净的静态输出。
防止在您创建的文档中引入脚本
从创作应用程序将文档导出为 PDF 时,请检查与交互元素相关的选项的导出设置。禁用 JavaScript、宏和嵌入操作,除非它们服务于接收者期望的特定、记录的目的。自动计算总计的表单应仅包含计算脚本。演示文稿 PDF 不应包含收件人无法控制的自动操作。您分发的任何 PDF 的默认内容应该是没有可执行代码的静态内容。脚本和自动化应该是选择加入,而不是选择退出。
PDF 工具 的脚本卫生方法与任何安全实践相同:默认为最安全的配置,并且仅在必要且收件人期望时添加交互性。不带脚本的 PDF 是无法执行恶意代码的 PDF。
区分良性自动化和恶意代码
PDF 中的大多数脚本都不是恶意的。自动计算行项目总计的表单、验证特定字段输入格式的文档或基于用户交互进行导航的演示文稿都使用合法的自动化。当您缺乏审计代码的工具或专业知识时,挑战在于将这些脚本与恶意脚本区分开来。实用的启发式方法:如果脚本的行为是可见且可预测的,例如生成可以验证的值的计算或响应有意点击的导航操作,则它可能是良性的。如果从文档的可见行为来看脚本的目的并不明显,如果它触发了用户无法控制的事件,或者如果它尝试访问外部资源,则需要将其删除。如有疑问,请删除并接受功能损失作为安全成本。
对于您定期从同一来源收到的文档,例如来自已知供应商的每月发票或每周报告,请逐步建立信任。在启用脚本删除的情况下处理第一个文档。检查输出是否缺少功能。如果文档在没有脚本的情况下正常工作,请继续从该源的后续文档中删除它们。如果文档失去了基本功能(例如不再计算总计的表单),请识别提供该功能的特定脚本并将其列入白名单,同时删除其他脚本。随着时间的推移,您将开发特定于源的脚本策略,以平衡安全性与功能。
PDF 脚本防病毒扫描的局限性
防病毒软件可以通过签名匹配来检测已知的恶意脚本,但这种方法有很大的局限性。基于签名的检测仅捕获与已知恶意软件模式匹配的脚本。新的或自定义的恶意脚本将不会被检测到。防病毒软件还可能标记与恶意软件共享表面级特征的良性脚本,从而产生误报。依赖防病毒扫描作为唯一的脚本检测方法会产生错误的安全感。对于来自不受信任来源的 PDF,最安全的方法是删除脚本,而不是评估脚本。删除良性脚本的代价是失去一些交互功能。允许恶意脚本逃避检测的成本可能要高得多。
尝试保护 PDF
无需安装。直接在您的浏览器中工作。
