1PoPTRoN/fake-pdf-redaction

GitHub: 1PoPTRoN/fake-pdf-redaction

一个只读的 PDF 脱敏审计工具,用于检测文档中被遮盖的内容是否真正被移除,帮助发现因不当脱敏操作导致的敏感信息泄露。

Stars: 0 | Forks: 0

# 虚假 PDF redaction 你在 PDF 里涂黑了一些内容。它真的消失了吗?大概率没有。 这是一个只读审计工具,用于检查 PDF 中被遮盖处背后是否包含可恢复的内容。六个检测器会对文档进行扫描,并通过 `evidence` 字段中的恢复字节,准确地告诉你泄露了什么。它不会修改文件,也不会进行任何网络上报。 ## 它能检测什么 - `covered_text` — 黑框下方仍可提取的文本 - `hidden_text` — 白底白字、零号字体、图片背后的文本 - `revision_history` — 增量更新本应删除的早期 PDF 版本中的内容 - `embedded_files` — 脱敏处理未触及的附件 - `metadata` — 不应该存在的作者、标题、XMP 字段 - `redact_annotations` — 实际上并未执行任何脱敏操作的脱敏注解 使用 `--only` 选择一个子集。 ## 三个层级 这个仓库是一个 monorepo。每一层都是独立的,你可以单独使用它们中的任何一个。 ### 1. Python 库和 CLI (`src/pdfaudit/`) ``` uv sync uv run pdfaudit scan some.pdf ``` Exit codes 可以直接接入 CI: - `0` — 干净,或低于你的阈值 - `2` — 发现达到或超过 `--fail-on` 的问题(默认值:`high`) - `3` — 检测器报错,因此无法证明是“干净”的。如果你信任部分扫描结果,可以使用 `--no-fail-on-error` 抑制该错误 - `1` — 用法或 I/O 错误 只需加一个标志即可输出 JSON:`pdfaudit scan some.pdf --json`。需要更严格的准入门槛?使用 `--fail-on medium`。想要限制内存,以免解压缩炸弹耗尽运行器资源?使用 `--max-memory 1024`。 ### 2. FastAPI 后端 (`backend/`) 同样的引擎,通过 HTTP 提供服务。四个 endpoint: - `GET /api/v1/health` — 存活检测 - `GET /api/v1/vectors` — 包含单行描述的检测器名称 - `POST /api/v1/scan` — multipart 上传,返回 JSON 报告 - `POST /api/v1/scan/pdf` — 同上,但会渲染一份单页 PDF 摘要供下载 ``` cd backend uv sync --extra dev uv run uvicorn app.main:app --port 8001 ``` ### 3. React 前端 (`frontend/`) Vite + TypeScript + Tailwind,采用 neubrutalism 风格。三种状态:引导加载、带拖拽区的主页、报告。只有在扫描完全干净时才会触发彩带特效——毕竟庆祝数据泄露感觉不太对劲。 ``` cd frontend npm install npm run dev # http://localhost:5174 ``` Vite 开发服务器将 `/api/*` 代理到 `:8001` 端口的后端。 ## 快速演示 如果你没有真实的 PDF 文件可供测试,这是最快发现问题的方式: ``` # make_boxed.py from reportlab.lib.pagesizes import letter from reportlab.pdfgen import canvas c = canvas.Canvas("boxed.pdf", pagesize=letter) c.setFont("Helvetica", 14) c.drawString(72, 720, "SSN123-45-6789") c.setFillColorRGB(0, 0, 0) c.rect(70, 715, 200, 18, fill=1, stroke=0) c.showPage() c.save() ``` 然后: ``` uv run pdfaudit scan boxed.pdf ``` 你应该会看到一条来自 `covered_text` 的 `critical` 级别的发现,其中 `evidence` 里包含了 SSN。那个黑矩形并没有进行任何脱敏;文本依然存在于内容流中,并且完全可以被选中。 ## 隐私 只读。无文件存储。无遥测。无 auth。后端会将上传内容写入临时文件,并在扫描完成后将其删除。浏览器除了通过 Vite 代理与你本地的后端通信外,绝不会与任何其他对象进行交互。 ## 布局 ``` fake-pdf-redaction/ ├── src/pdfaudit/ # Python library and CLI ├── backend/ # FastAPI service ├── frontend/ # React UI ├── tests/ # pytest suite (covers all six detectors) ├── pyproject.toml # workspace └── uv.lock ``` ## 测试 ``` uv run pytest -v ``` 测试用例语料库涵盖了典型的脱敏错误:文本上方的黑框、白底白字、微小字体、残留的增量更新、隐藏的附件以及元数据泄露。 ## 许可证 MIT。
标签:AV绕过, FastAPI, LNA, PDF工具, Python, React, StruQ, Syscalls, 安全规则引擎, 数据泄露, 无后门, 逆向工具