天天看點

Open XML應用安全(3)隐藏資料Open XML應用安全(3)隐藏資料

這裡的隐藏資料是指Office文檔預設存儲的一些基本屬性資訊,很有可能會包含一些敏感資訊,比如公司、建立者、簽名、評論等。

針對隐藏資訊,Office為我們提供了文檔檢查器。可以按照信任中心→個人資訊選項→文檔檢查器的方式打開文檔檢查器。如圖14-26所示。

圖14-26  文檔檢查器

文檔檢查器是用來檢查隐藏資訊的,并提供了删除功能。現在再來看Office定義的個人資訊,包括如下各項:姓名和縮寫、公司群組織名稱、計算機名、網絡伺服器和硬碟驅動器、其他檔案屬性和摘要資訊、OLE對象、文檔不同版本的作者資訊、文檔修訂資訊、文檔版本資訊、模闆資訊、隐藏文本、修訂和批注。

當執行檢查操作的時候,會列出含有隐藏資訊的項,并給出删除功能,如圖14-27所示。

圖14-27  文檔審查結果

如果想實作更靈活的功能,可以在代碼中調用文檔檢查器。在C#中,可以通過調用Microsoft.Office.Core.IdocumentInspector接口來調用文檔檢查器的功能。如果你有VSTO的程式設計基礎,可以編寫一個Office插件來實作一些自定功能。當然,使用Open XML SDK 提供的API可以更友善的實作操作隐藏資訊的功能。代碼清單14-22是一個檢索Word文檔屬性的例子。

代碼清單14-22  檢索Word文檔屬性

public static void GetPropertyFromDocument(string document)

{

   XmlDocument xmlProperties = new XmlDocument();

   using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, false))

   {

      ExtendedFilePropertiesPart appPart = wordDoc.ExtendedFilePropertiesPart;

      xmlProperties.Load(appPart.GetStream());

   }

   XmlNodeList chars = xmlProperties.GetElementsByTagName("Characters");

   MessageBox.Show(chars.Item(0).InnerText);

}

在代碼清單14-22中,隻需注意它是如何提取屬性資訊即可,隻需調用WordprocessingDocument對象的ExtendedFilePropertiesPart屬性即可。

通過上面的例子我想告訴各位讀者的是,所有隐藏資訊都會作為文檔的屬性存在,隻要你去看看API的幫助文檔就會了解一切。同時使用Open XML SDK的API開發起來要比VSTO容易得多。為了加深印象,再來看一個移除隐藏文字的例子,如代碼清單14-23所示。

代碼清單14-23  移除隐藏文字

public static void DeleteHiddenText(string filepath)

    // Given a document name, delete all the hidden text.

    using (WordprocessingDocument wdDoc =

        WordprocessingDocument.Open(filepath, true))

    {

        Body body = wdDoc.MainDocumentPart.Document.Body;

        var hiddens = body.Descendants<Vanish>();

        foreach (var hidden in hiddens)

        {

            var run = hidden.Parent.Parent;

            run.Remove();

        }

    }

在代碼清單14-23中,關鍵代碼隻有一句:

var hiddens = body.Descendants<Vanish>();

其中,對象Vanish代表隐藏文字。

隐藏資料的修改這裡就再不示範,讀者在了解原理之後,在需要的時候可以通過Office的工具或者自己動手編寫代碼來消除安全隐患。

 ------------------------注:本文部分内容改編自《.NET 安全揭秘》

本文轉自玄魂部落格園部落格,原文連結:http://www.cnblogs.com/xuanhun/archive/2012/06/24/2560126.html,如需轉載請自行聯系原作者