OLE(Object Linking and Embedding,對象連接配接與嵌入)不僅是桌面應用程式內建,而且還定義和實作了一種允許應用程式作為軟體“對象”(資料集合和操作資料的函數)彼此進行“連接配接”的機制,這種連接配接機制和協定稱為部件對象模型(Component Object Model,COM)。
OLE可以用來建立複合文檔,複合文檔包含了建立于不同源應用程式,有着不同類型的資料,是以它可以把文字、聲音、圖像、表格、應用程式等組合在一起。
但對OLE的支援也帶來了一些安全性問題,如在Outlook 2002及以上版本中,黑客如果在郵件中嵌入危險OLE對象,就可以對其肆意僞裝,有可能騙過使用者導緻安全問題。
OLE2是OLE對象的更新版本。
Office中的宏也是作為OLE2對象嵌入到文檔中的,下面看在Word中建立一個Excel文檔的例子。
首先在Word文檔中選擇插入→表格→Excel電子表格,如圖14-23所示。
圖14-23 插入電子表格
執行圖14-23的操作後得到圖14-24所示的結果。
圖14-24 在Word中插入Excel表格
實際上,插入的Excel會作為一個OLE2對象存儲在對應的ZIP包的邏輯目錄下,然後通過關系加載到主文檔中。對于.docx文檔,OLE對象通常存儲在word\embeddings目錄下,如圖14-25所示。
圖14-25 OLE對象在Word中的存儲
OLE對象以它的原生格式存儲在ZIP包中。還有另一類OLE對象稱為OLE Package對象,這類對象可以包含任意檔案,并且可以設定指令。OLE Package對象以OLE2二進制格式存儲。
如果嵌入一個惡意的OLE對象,或者惡意程式替換或者向文檔中添加惡意OLE對象,都會造成很嚴重的後果。
如果應用場景有需要,無法完全避免OLE對象的執行,但是可以借助防毒軟體來減弱Office文檔的危害。如果你還不是很放心,可以通過程式處理OLE對象,删除或者重命名。隻要有個解壓縮工具就可以完成這樣的工作,下面提供一小段代碼,見代碼清單14-21。
代碼清單14-21 删除OLE對象
public static void RemovePart(string document)
{
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
{
MainDocumentPart mainPart = wordDoc.MainDocumentPart;
if (mainPart.DocumentSettingsPart != null)
{
mainPart.DeleteParts(mainPart.EmbeddedObjectParts);
mainPart.DeleteParts(mainPart.EmbeddedPackageParts);
}
}
}
提示使用以上代碼之前,需要在項目中添加對DocumentFormat.OpenXml.dll的引用,才能夠使用Open XML SDK提供的API。
在代碼中,首先擷取主文檔對象MainDocumentPart,使用mainPart.EmbeddedObjectParts和mainPart.EmbeddedPackageParts分别擷取文檔中的OLE對象和OLE Package對象,最後調用MainDocumentPart類的DeleteParts方法删除它們。
如果防止惡意添加或者修改OLE對象,可以對Open XML文檔進行數字簽名,在後面的博文會進行講解。
--------------------------注:本文部分内容改編自《.NET 安全揭秘》
本文轉自玄魂部落格園部落格,原文連結:http://www.cnblogs.com/xuanhun/archive/2012/06/24/2560122.html,如需轉載請自行聯系原作者