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