已載入文件淨化
SanitiseLoadedDocument 將選取的安全策略套用至完整的已載入物件圖,並準備進行精簡的完整重寫
設定檔
| 設定檔 | 移除的內容 |
|---|---|
spJavaScriptOnly | 文件 JavaScript 名稱樹與 JavaScript 動作 |
spActiveContent | JavaScript,加上 launch、遠端導覽、URI、提交、匯入、多媒體、rendition、XFA 與相關的主動內容項目 |
spJavaScriptOnly | 文件 JavaScript 名稱樹與 JavaScript 動作 |
spActiveContent | JavaScript 加上啟動、遠端導覽、URI、提交、匯入、多媒體、展演、XFA 與相關的主動內容項目 |
spUntrustedDocument | 所有主動內容加上內嵌檔案、關聯檔案、檔案附件註解、Rich Media 承載結構,以及在帶動作位置中發現的不明動作類型 |
宣告
function SanitiseLoadedDocument(Profile: THPDFSanitiseProfile;
out Report: THPDFSanitiseReport): Boolean; overload;
function SanitiseLoadedDocument(
out Report: THPDFSanitiseReport): Boolean; overload;
未指定設定檔的多載會使用 spUntrustedDocument
結果報告
THPDFSanitiseReport 會計算移除的動作、JavaScript 項目、內嵌檔案、高風險註解、XFA 項目、承載串流、分離參照、不可達物件與已造訪物件
Changed 指出物件圖是否變更,而 LimitExceeded 與 InvalidObjectGraph 則說明被拒絕的預檢
安全性與效能
- 此作業會為間接物件建立索引,並以近乎線性的時間解析參照,而非重複掃描物件清單
- 循環安全的預檢會在任何變更之前造訪完整的候選圖,並拒絕超過兩百萬個唯一節點的圖
- 未受信任設定檔對於附加至帶動作索引鍵的無法辨識動作字典會安全失敗,同時保留已辨識的本機
GoTo導覽 - 完整重寫會將不可達的間接物件標示為已刪除,並壓縮作用中物件編號,以移除孤立承載位元組並避免稀疏的交互參考配置
- 儲存回已載入的來源路徑時,會寫入同層級暫存檔,且僅在重寫成功後才以原子方式取代來源
- 存回已載入來源路徑時,會先寫到同層暫存檔,重寫成功後才以原子方式替換來源
範例
var
Report: THPDFSanitiseReport;
begin
PDF.LoadFromFile('untrusted.pdf');
if not PDF.SanitiseLoadedDocument(spUntrustedDocument, Report) then
raise Exception.Create('Document sanitisation was rejected');
PDF.SaveLoadedDocument('sanitised.pdf');
end;
使用說明
- 僅在
LoadFromFile或其他已載入文件工作流程成功之後才呼叫此方法 - 成功的呼叫會強制完整重寫並結束增量更新模式,因為移除的位元組不得殘留於較早的修訂中
- 此方法會移除主動結構與承載可達性,但不會執行或解譯內嵌指令碼