나는 PDF를 전송하기 전에 검사하는 보안 스캐너를 만들었습니다. 방법은 다음과 같습니다. [Devlog #10]

발행: (2026년 4월 24일 AM 10:30 GMT+9)
3 분 소요
원문: Dev.to

Source: Dev.to

개요

계약서를 이메일로 보내려 합니다. 겉으로는 깔끔해 보이지만 이름, 컴퓨터 호스트명, 원본 작성자의 회사, 생성 타임스탬프와 같은 숨은 메타데이터가 포함되어 있을 수 있습니다. 수신자는 이 모든 정보를 볼 수 있습니다.

Audit Report는 전송하기 전에 모든 PDF를 스캔하여 이러한 누수를 잡아냅니다.

스캐너가 검사하는 항목

  • 메타데이터 누수 – Author, Creator, Producer, 타임스탬프
  • 숨은 텍스트 레이어 – 일반 줌에서는 보이지 않는 내용
  • 내장 스크립트 또는 폼 액션
  • 깨끗한 문서에 있어서는 안 되는 비표준 객체
  • 제대로 제거되지 않은 삭제된 내용 (픽셀 수준 검사)

예시 결과 구조 (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

저자를 트위터에서 팔로우하세요: @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 일정에...