filipe1309/pdf-prompt-injection-evaluator

GitHub: filipe1309/pdf-prompt-injection-evaluator

PDF提示注入评估器,用于检测PDF文件中的提示注入攻击。

Stars: 0 | Forks: 0

# PDF 提示注入评估器

PDF Prompt Injection Evaluator Icon

一款桌面应用程序,帮助律师验证 PDF 文件是否存在提示注入攻击。 ## 功能 - **启发式检测(第 1 层)**:通过可插拔的检测管道进行离线扫描——零宽度字符、隐藏文本、Unicode 诡计、嵌入 JavaScript、可疑注释、表单字段、OCG 层和指令模式(pt-BR + EN) - **LLM 语义分析(第 2 层)**:可选的深度分析,使用 OpenAI、Gemini、Anthropic 或自定义 LLM 端点 - **多文件队列**:一次处理多个 PDF 文件,带有进度跟踪和批量深度分析 - **PDF 查看器**:应用程序内 PDF 渲染,对可疑区域进行视觉突出显示 - **报告导出**:生成 PDF/text 报告(单个或批量),可附加到法律诉讼中(包括 SHA-256 整性哈希) - **双语言**:完全支持葡萄牙语(BR)和英语——包括报告生成 - **持久设置**:跨会话保存语言、LLM 提供商和 API 密钥 - **Lucide 图标**:所有 UI 指示器的干净 SVG 图标集 ## 技术栈 - **后端**:Rust + Tauri v2 - **前端**:HTML/CSS/JS + PDF.js - **PDF 解析**:lopdf + pdf-extract - **报告生成**:genpdf ## 开发 ### 前置条件 - Rust(最新稳定版) - Cargo - Tauri CLI v2 ### 设置 ``` make install-deps ``` ### 可用命令 | 命令 | 描述 | |------|-------------| | `make help` | 显示所有可用目标 | | `make dev` | 以开发模式运行应用程序 | | `make build` | 构建 Rust 后端(调试) | | `make release` | 为当前平台构建生产版本 | | `make release-mac` | 构建 macOS 包 (.app + .dmg) 用于 Apple Silicon | | `make release-win` | 构建 Windows 包 (.exe / .msi) | | `make test` | 运行所有单元测试 | | `make test-verbose` | 以输出方式运行测试 | | `make lint` | 运行 clippy 检查器 | | `make fmt` | 格式化 Rust 代码 | | `make fmt-check` | 检查格式化而不修改文件 | | `make check` | 快速编译验证 | | `make clean` | 删除构建工件 | | `make update` | 更新 Rust 依赖项 | ### 快速开始 ``` make install-deps # one-time setup make dev # run in development ``` ### 为生产构建 ``` make release ``` 可执行文件将在 `src-tauri/target/release/bundle/` 中。 ## 配置 点击 ⚙️ 按钮进行配置: - LLM 提供商和 API 密钥 - 语言偏好(pt-BR / EN) - 自定义端点 URL(用于自托管模型) ## 工作原理 ### 第 1 层:启发式检测(离线) 使用可插拔的检测管道 (`src-tauri/src/detectors/`) 扫描 PDF 结构。每个攻击向量都位于其自己的文件中,实现 `VectorDetector` 特性。检测器包括: - 隐藏文本的零宽度字符 - 双向 Unicode 覆盖 - 指令操纵模式(pt-BR 和 EN) - 嵌入 JavaScript - 可疑元数据、注释和表单字段 - 内容流中的白色/不可见/微小的文本 - 隐藏的 OCG 层、ActualText 属性和增量更新 ### 第 2 层:LLM 语义分析(可选) 将完整提取的文本加上启发式发现发送到您配置的 LLM,以对注入尝试进行语义分类。适用于单个文件或批量模式跨整个队列。 ## 测试样本 `samples/` 目录包含您可以使用来测试应用程序和理解不同注入技术的 PDF 文件: ### 基本样本 | 文件 | 描述 | |------|-------------| | `peticao_limpa.pdf` | 干净的劳动请愿书——没有注入(控制文件) | | `peticao_com_injection.pdf` | 与请愿书相同,但在可见内容之前隐藏了白色文本注入 | ### 注入向量样本 (`samples/vectors/`) 每个攻击向量一个 PDF,基于 [15 个记录的技术](https://www.migalhas.com.br/depeso/455924/prompt-injection-em-documentos-judiciais-conceito-vetores-e-riscos) 用于司法文件中的 PDF 提示注入: | # | 文件 | 向量 | 复杂性 | |---|------|--------|---------------| | 01 | `01_texto_branco.pdf` | 白色文本在白色背景上 | 最小 | | 02 | `02_metadados_info.pdf` | 在 /Info 元数据(主题、关键词、创建者)中注入 | 最小 | | 03 | `03_texto_fora_limites.pdf` | 定位在可见页面边界之外的文本 | 低 | | 04 | `04_fonte_microscopica.pdf` | 微观字体大小(<2pt) | 低 | | 05 | `05_unicode_invisivel.pdf` | 零宽度空格(U+200B)、bidi 覆盖(U+202E) | 低 | | 06 | `06_revisao_incremental.pdf` | 在数字签名之后附加内容(增量更新) | 中等 | | 07 | `07_actualtext.pdf` | /ActualText 可访问性属性与内容不同 | 中等 | | 08 | `08_campos_assinatura.pdf` | 带有指令的签名字段 (/Reason、/Location) | 中等 | | 09 | `09_acroform_oculto.pdf` | 隐藏的 AcroForm 字段带有注入值 | 中等 | | 10 | `10_camada_ocg_off.pdf` | 禁用的 OCG 层(不可见但可提取) | 中等 | | 11 | `11_idioma_estrangeiro.pdf` | 葡萄牙语文档中的英语指令 | 低/中等 | | 12 | `12_token_flooding.pdf` | 大量重复有利法律术语 | 高 | | 13 | `13_tounicode_cmap.pdf` | 伪造的字体到 Unicode 映射(提取 ≠ 可见) | 高 | | 14 | `14_citation_poisoning.pdf` | 假法理和不存在的前例 | 高 | | 15 | `15_javascript_openaction.pdf` | 通过 /OpenAction 嵌入 JavaScript | 高 | | 16 | `16_instrucao_visivel.pdf` | 隐藏在合同文本中的可见提示注入 | 最小 | ### 使用方法 1. 使用 `make dev` 打开应用程序 2. 将任何样本 PDF 拖放到拖放区域 3. 比较干净文件和注入文件的输出结果 4. 启发式检测器应自动标记向量 01–05、11–12、15–16 5. 对于高级向量(06–10、13–14),使用 LLM 深度分析以获得更好的检测 ## 许可证 MIT
标签:Anthropic, CIS基准, DInvoke, Gemini, HTML/CSS/JS, lopdf, OpenAI, pdf-extract, PDF.js, PDF安全检测, Rust编程, SHA-256, Tauri框架, 人工智能安全, 内存规避, 反取证, 可视化界面, 合规性, 图标设计, 多语言支持, 安全测试框架, 安全评估, 律师工具, 文件处理, 法律文件, 深度学习, 用户界面, 进度跟踪, 通知系统