我构建了一个安全扫描器,在你发送 PDF 前审计它们。以下是实现过程。[Devlog #10]

发布: (2026年4月24日 GMT+8 09:30)
3 分钟阅读
原文: Dev.to

Source: Dev.to

概览

您即将通过电子邮件发送一份合同。表面上看它很干净,但仍可能包含隐藏的元数据,例如您的姓名、机器的主机名、原作者的公司以及创建时间戳。收件人可以看到所有这些信息。

Audit Report 会在您点击发送之前扫描每个 PDF,捕获这些泄漏。

扫描器检查的内容

  • 元数据泄漏 – 作者、创建者、生成器、时间戳
  • 隐藏文本层 – 在普通缩放下不可见的内容
  • 嵌入的脚本或表单操作
  • 不符合标准的对象,这些对象不应出现在干净的文档中
  • 未正确删除的已编辑内容(像素级检查)

示例结果结构(Rust)

pub struct AuditResult {
    pub metadata_warnings: Vec,
    pub hidden_content: Vec,
    pub suspicious_objects: Vec,
    pub risk_level: RiskLevel,
}

核心审计函数

pub fn audit_pdf(doc: &Document) -> AuditResult {
    let mut result = AuditResult::default();

    // 1. Check Info dictionary
    if let Ok(info) = doc.get_info() {
        for key in &["Author", "Creator", "Producer"] {
            if info.get(*key).is_some() {
                result.metadata_warnings.push(format!("{} field present", key));
            }
        }
    }

    // 2. Walk all objects for suspicious content
    for (id, object) in &doc.objects {
        if let Ok(stream) = object.as_stream() {
            if contains_hidden_text(stream) {
                result.hidden_content.push(HiddenLayer { id: *id });
            }
        }
    }

    result.risk_level = compute_risk(&result);
    result
}

审计结果会以格式化的 PDF 报告形式写出,完全离线生成且不依赖外部库。报告包括:

  • 一个绿色摘要,指示整体安全性
  • 检查项目的详细列表以及任何警告

为什么重要

大多数人只检查 PDF 的可见内容。没有人会检查不可见的内容——而这款工具正是专门做这件事的。

获取工具

Hiyoko PDF Vault – 扫描器的即用版:
https://hiyokoko.gumroad.com/l/HiyokoPDFVault

在 Twitter 上关注作者: @hiyoyok

0 浏览
Back to Blog

相关文章

阅读更多 »

Ubuntu 26.04 LTS 发布

发布概览:Ubuntu 26.04 “Resolute Raccoon” LTS 已按计划发布 https://discourse.ubuntu.com/t/ubuntu-26-04-resolute-raccoon-lts-released/80833…