PDF 为什么会有脚本
自 Acrobat 3 起,PDF 就支持 JavaScript。表单能自动求和、拒绝格式不对的日期、在勾选之前禁用某个字段,靠的都是它。恶意 PDF 值得被发送出来,同样也是因为它。
大多数号称能检测 PDF JavaScript 的工具只看 /Names /JavaScript。那是文档级存储,在真实的商务表单里通常是空的。有价值的代码绑在具体字段上。
会检查的所有位置
/Names /JavaScript— 文档级名称树。它是一棵树而不是一个列表,只读根数组的工具在脚本很多的文件里什么也找不到。/OpenAction— 文档一打开就运行,你还没读到一个字。- 文档附加动作 — 关闭前、保存前后、打印前后。
- 页面动作 — 页面打开和关闭时。
- 注释动作 — 链接或按钮的
/A动作,以及鼠标进入、离开、按下、抬起、获得焦点和失去焦点。 - 表单字段动作 — 按键、格式、校验和计算。任何真正做事的表单,代码就在这里。
/AcroForm /CO— 计算顺序,决定两个相互依赖的合计谁说了算。
通过 /Next 串联的动作链会被跟踪:停在第一环,就只读到了无害的部分,错过了它交棒给谁。
是观察,不是结论
app.launchURL、this.submitForm、this.exportDataObject、Net.HTTP、eval 以及长串 \uNNNN 转义会被标出,作为「值得读一读这段脚本」的理由。它们都不能证明什么:正规的报销单会调用 submitForm,正规的模板会调用 util.printf。标记只是告诉你该看哪里。
任何内容都不会执行
脚本以纯文本形式从对象图中读出并显示。它们从不会被求值、注入页面或从网络获取。你可以复制其中一段、另存为 .js,或把全部脚本连同 JSON 报告打包成 ZIP 带走。
隐私
文件完全在你的浏览器中解析,从不上传——当你检查的正是一个你并不信任的文件时,这一点尤其重要。
Tiny Online Tools







