Harry-Zhang121/pdfsani
GitHub: Harry-Zhang121/pdfsani
pdfsani 是一款基于 Rust 的确定性 PDF 清理工具,通过物理移除恶意结构、不可见文本和危险字符,保护 LLM 和 RAG 管道免受间接提示注入攻击。
Stars: 0 | Forks: 0
# pdfsani
**用于 LLM 和 RAG 管道的确定性 PDF 提示注入清理工具。**
[](https://github.com/Harry-Zhang121/pdfsani/actions/workflows/ci.yml)
[](https://github.com/Harry-Zhang121/pdfsani/releases)
[](https://opensource.org/licenses/MIT)
[](https://www.rust-lang.org)
[English](README.md) | [中文](README_CN.md)
通过 PDF 进行的间接提示注入是一种日益增长的攻击向量。攻击者在 PDF 中嵌入不可见的指令——白底白字文本、1pt 字体、零宽 Unicode 字符、隐藏层、元数据载荷——当 AI 系统读取该 PDF 时,它会默默地遵循攻击者的指令而非用户的指令。`pdfsani` 在内容到达 AI 系统之前,从字节级别物理剥离 PDF 中所有已知的攻击面,从而使此类攻击成为不可能。
## 亮点
| ### 确定性 无 ML 模型,无启发式方法,无概率评分。每次运行对相同输入产生完全相同的输出。物理结构移除 + 严格字符黑名单 = **100% 可预测的结果**。 | ### 极速 单个 **2.5MB** 的静态优化 Rust 二进制文件。在 **个位数毫秒** 内处理典型 PDF。无运行时依赖,无解释器,无容器。 | ### Agent 就绪 内置 **agent skill**,教 AI 编码 agent 自动使用 `pdfsani`。直接放入,你的 AI 读取的每个 PDF 都会先经过清理——**零配置**。 |
Linux (x86_64)
``` curl -LO https://github.com/Harry-Zhang121/pdfsani/releases/latest/download/pdfsani-x86_64-unknown-linux-gnu.tar.gz tar xzf pdfsani-x86_64-unknown-linux-gnu.tar.gz sudo mv pdfsani /usr/local/bin/ ```macOS (Apple Silicon)
``` curl -LO https://github.com/Harry-Zhang121/pdfsani/releases/latest/download/pdfsani-aarch64-apple-darwin.tar.gz tar xzf pdfsani-aarch64-apple-darwin.tar.gz sudo mv pdfsani /usr/local/bin/ ```macOS (Intel)
``` curl -LO https://github.com/Harry-Zhang121/pdfsani/releases/latest/download/pdfsani-x86_64-apple-darwin.tar.gz tar xzf pdfsani-x86_64-apple-darwin.tar.gz sudo mv pdfsani /usr/local/bin/ ```Windows (x86_64)
从 [releases page](https://github.com/Harry-Zhang121/pdfsani/releases) 下载 `pdfsani-x86_64-pc-windows-msvc.zip`,解压,并将其添加到你的 PATH 中。结构层级——切除危险的 PDF 对象
| 移除项 | 原因 | |---------|-----| | Metadata (/Info, /Metadata, XMP) | 可能携带隐藏指令 | | Forms (/AcroForm) | 可能包含可执行内容 | | Bookmarks and annotations | 可能携带隐藏文本载荷 | | Hidden layers (OCG with visibility OFF) | 对人类不可见,对解析器可见 |内容流层级——过滤不可见文本
| 攻击 | 检测 | 风险 | |--------|-----------|------| | White text | RGB > 0.90 | 在白色背景上不可见 | | Micro font | Size < 3pt | 人类无法阅读 | | Off-page text | Outside MediaBox | 放置在可见区域之外 | | Hidden layer text | OCG BDC/EMC markers | 位于已关闭的图层中 |字符层级——剥离危险的 Unicode
| 类别 | 范围 | |----------|-------| | Zero-width characters | U+200B-200F, U+2060-2064, U+FEFF, U+00AD, U+180E | | Unicode tag block | U+E0000-E007F | | RTL/bidi control | U+202A-202E, U+2066-2069 | | Private Use Area | U+E000-F8FF | | C0 control (except \n \r \t) | U+0000-001F | | C1 control | U+0080-009F | 所有文本均经过 NFKC 标准化(全角转半角、同形字解析)。标签:Agent, AI安全, Chat Copilot, CISA项目, DLL 劫持, DNS 反向解析, LLM, PDF, PDF解析, RAG, RuleLab, Rust, Unmanaged PE, 可视化界面, 大语言模型, 字节级操作, 安全, 恶意软件防护, 搜索语句(dork), 攻击向量, 数据清洗, 检索增强生成, 网络安全, 网络流量审计, 自动化防御, 超时处理, 通知系统, 隐写术, 隐私保护, 零依赖