SelahattinSert/pfg
GitHub: SelahattinSert/pfg
一款基于 Rust 构建的本地隐私元数据审计与清理工具,支持对图像、PDF 和 Office 文档中的隐藏位置信息、设备标识及个人身份数据进行扫描、脱敏和验证。
Stars: 0 | Forks: 0

# Privacy File Guard (PFG)
[](https://www.rust-lang.org/)
[](https://tauri.app/)
[](LICENSE)
[](crates/pfg-core/src/lib.rs)
## 概要总结与架构
Privacy File Guard 有助于在分享或发布文档和图像时防止意外的隐私泄露。它采用模块化的 Rust workspace 架构(`#![forbid(unsafe_code)]`)构建,PFG 完全在您的本地设备上处理文件,无需外部网络连接。
### 格式支持矩阵
| 格式类别 | 格式 | 扫描与清理的元数据 |
| :--- | :--- | :--- |
| **位图图像** | `.jpg`, `.jpeg`, `.png`, `.webp` | EXIF, GPS, 相机型号, 镜头序列号, XMP 流, PNG `tEXt`/`iTXt`/`zTXt` 数据块, WebP EXIF/XMP 数据块。 |
| **PDF 文档** | `.pdf` | `/Info` 字典 (作者, 创建者, 制作程序, 标题), `/Metadata` XMP 流, `/OpenAction` JavaScript, `/Annots` (在严格模式下)。保留 Catalog 和 Page tree。 |
| **Office 文档** | `.docx`, `.xlsx`, `.pptx` | `docProps/core.xml` (作者, 最后修改者, 日期), `docProps/app.xml` (公司, 经理), 自定义属性, 缩略图, VBA 宏 (`vbaProject.bin`) 以及评论。 |
## 配置文件与隐私保障
### 清理配置文件
- **均衡配置文件 (默认)**:清除 PII、位置数据、相机序列号、作者身份、评论和高风险元数据属性,同时保留基本的渲染属性,例如颜色配置文件 (`iCCP`) 和物理尺寸 (`pHYs`)。
- **严格配置文件**:剥离所有非必要的元数据属性、自定义属性、评论、缩略图和注释,以实现最大程度的隐私保护。
### 现实的保障承诺
Privacy File Guard 对支持的文件格式执行本地元数据清理和清理后的验证检查。它不对文档中人类可读的文本内容、隐藏的隐写术或无法识别的专有流格式提供绝对保证。
## 前置条件与构建
### 前置条件
Privacy File Guard 需要 **Rust** (`rustup`) 和 **Node.js**。
#### Fedora / RHEL Linux:
```
sudo dnf install -y webkit2gtk4.1-devel libsoup3-devel gtk3-devel libappindicator-gtk3-devel librsvg2-devel
```
#### Ubuntu / Debian Linux:
```
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libsoup-3.0-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev
```
#### Windows / macOS:
标准 Rust 工具链 (`cargo`)。
### 构建与测试
```
git clone https://github.com/SelahattinSert/pfg.git
cd pfg
# 执行完整工作区 unit & integration test suite
cargo test --workspace
```
## 使用指南
### 1. 桌面图形用户界面 (GUI)
启动桌面应用程序:
```
cargo run -p pfg-desktop
```
- **单文件模式**:拖放任何受支持的图像或文档以检查发现的结果,切换未脱敏的原始值,并执行基于配置文件的清理。
- **批处理目录模式**:选择一个文件夹以运行并行多核审计和就地事务性清理。
### 2. 命令行界面 (CLI)
```
# 扫描单个文件
cargo run -p pfg-cli -- scan /path/to/document.pdf
# 使用 Balanced profile 清理文件(输出 document.pfg.pdf)
cargo run -p pfg-cli -- clean /path/to/document.pdf
# 使用 Strict profile 清理文件至自定义输出目录
cargo run -p pfg-cli -- clean /path/to/image.jpg --profile strict --output-dir /path/to/output
# 验证原始文件与清理后文件之间的清洁状态
cargo run -p pfg-cli -- verify /path/to/original.jpg /path/to/image.pfg.jpg
# 多线程批量目录扫描
cargo run -p pfg-cli -- scan /path/to/folder -r -j 8
# 多线程批量原地清理
cargo run -p pfg-cli -- clean /path/to/folder -r --in-place
```
### CLI 退出码
- `0`:操作完全成功 / 验证通过。
- `1`:达到或超过阈值(使用 `--fail-on` 时)。
- `2`:未找到目标文件或目录 / IO 错误。
- `3`:不支持的文件格式。
- `4`:目标文件已损坏或无法解析。
- `5`:清理操作失败。
- `6`:验证失败。
## Workspace 架构
```
privacy-file-guard-source/
├── docs/
│ └── privacy_file_guard_banner.jpg
├── crates/
│ ├── pfg-model/ # Privacy-safe domain models & finding structures
│ ├── pfg-policy/ # Profile policy engine & severity categorization
│ ├── pfg-format-image/ # JPEG, PNG, WebP parsers & EXIF orientation engine
│ ├── pfg-format-pdf/ # PDF redactors & structural validators
│ ├── pfg-format-office/ # DOCX, XLSX, PPTX OOXML ZIP sanitizers
│ ├── pfg-core/ # Rayon parallel batch engine & policy verifier
│ ├── pfg-cli/ # Command Line Interface (CLI) application
│ └── pfg-desktop/ # Tauri 2 + React desktop GUI application
└── Cargo.toml
```
## 安全策略与许可证
- **安全性**:此 workspace 中的每个 crate 都在顶级 crate 根目录强制执行 `#![forbid(unsafe_code)]`。
- **许可证**:在 [Mozilla Public License 2.0 (MPL-2.0)](LICENSE) 下分发。
标签:MITM代理, Rust, Tauri, 元数据清理, 可视化界面, 数据脱敏, 桌面应用, 网络安全, 网络流量审计, 通知系统, 隐私保护