华南俳烁实业有限公司

考試首頁(yè) | 考試用書(shū) | 培訓(xùn)課程 | 模擬考場(chǎng) | 考試論壇  
  當(dāng)前位置:設(shè)計(jì)制作 > XML > 文章內(nèi)容
  

OpenXML應(yīng)用安全(3)隱藏?cái)?shù)據(jù)

 [ 2017年5月31日 ] 【

  這里的隱藏?cái)?shù)據(jù)是指Office文檔默認(rèn)存儲(chǔ)的一些基本屬性信息,很有可能會(huì)包含一些敏感信息,比如公司、創(chuàng)建者、簽名、評(píng)論等。

  針對(duì)隱藏信息,Office為我們提供了文檔檢查器。可以按照信任中心→個(gè)人信息選項(xiàng)→文檔檢查器的方式打開(kāi)文檔檢查器。如圖14-26所示。

  

  圖14-26 文檔檢查器

  文檔檢查器是用來(lái)檢查隱藏信息的,并提供了刪除功能,F(xiàn)在再來(lái)看Office定義的個(gè)人信息,包括如下各項(xiàng):姓名和縮寫、公司和組織名稱、計(jì)算機(jī)名、網(wǎng)絡(luò)服務(wù)器和硬盤驅(qū)動(dòng)器、其他文件屬性和摘要信息、OLE對(duì)象、文檔不同版本的作者信息、文檔修訂信息、文檔版本信息、模板信息、隱藏文本、修訂和批注。

  當(dāng)執(zhí)行檢查操作的時(shí)候,會(huì)列出含有隱藏信息的項(xiàng),并給出刪除功能,如圖14-27所示。

  

  圖14-27 文檔審查結(jié)果

  如果想實(shí)現(xiàn)更靈活的功能,可以在代碼中調(diào)用文檔檢查器。在C#中,可以通過(guò)調(diào)用Microsoft.Office.Core.IdocumentInspector接口來(lái)調(diào)用文檔檢查器的功能。如果你有VSTO的編程基礎(chǔ),可以編寫一個(gè)Office插件來(lái)實(shí)現(xiàn)一些自定功能。當(dāng)然,使用Open XML SDK 提供的API可以更方便的實(shí)現(xiàn)操作隱藏信息的功能。代碼清單14-22是一個(gè)檢索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中,只需注意它是如何提取屬性信息即可,只需調(diào)用WordprocessingDocument對(duì)象的ExtendedFilePropertiesPart屬性即可。

  通過(guò)上面的例子我想告訴各位讀者的是,所有隱藏信息都會(huì)作為文檔的屬性存在,只要你去看看API的幫助文檔就會(huì)了解一切。同時(shí)使用Open XML SDK的API開(kāi)發(fā)起來(lái)要比VSTO容易得多。為了加深印象,再來(lái)看一個(gè)移除隱藏文字的例子,如代碼清單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();

  foreach (var hidden in hiddens)

  {

  var run = hidden.Parent.Parent;

  run.Remove();

  }

  }

  }

  在代碼清單14-23中,關(guān)鍵代碼只有一句:

  var hiddens = body.Descendants();

  其中,對(duì)象Vanish代表隱藏文字。

  隱藏?cái)?shù)據(jù)的修改這里就再不演示,讀者在了解原理之后,在需要的時(shí)候可以通過(guò)Office的工具或者自己動(dòng)手編寫代碼來(lái)消除安全隱患。

本文糾錯(cuò)】【告訴好友】【打印此文】【返回頂部
將考試網(wǎng)添加到收藏夾 | 每次上網(wǎng)自動(dòng)訪問(wèn)考試網(wǎng) | 復(fù)制本頁(yè)地址,傳給QQ/MSN上的好友 | 申請(qǐng)鏈接 | 意見(jiàn)留言 TOP
關(guān)于本站  網(wǎng)站聲明  廣告服務(wù)  聯(lián)系方式  站內(nèi)導(dǎo)航  考試論壇
Copyright © 2007-2013 中華考試網(wǎng)(Examw.com) All Rights Reserved
彭州市| 诏安县| 汝城县| 绩溪县| 宜宾市| 西藏| 扶余县| 东至县| 新郑市| 信宜市| 天长市| 怀集县| 元朗区| 榆中县| 寻甸| 溆浦县| 张北县| 彰武县| 慈利县| 绍兴县| 即墨市| 若尔盖县| 广河县| 新泰市| 济源市| 济南市| 扎兰屯市| 兴安县| 哈巴河县| 都安| 扶绥县| 松潘县| 都昌县| 绍兴市| 喜德县| 龙山县| 吴忠市| 崇信县| 南汇区| 古蔺县| 沙河市|