Office Open XML文件规范学习


=Start=

缘由:

近期在做一些文档追踪方案的学习和测试,除了纯文本的txt/csv文本格式之外,用的最多的就是Office文档了,在新的Office套件里面早就默认使用了 docx/xlsx/pptx 后缀,而非之前的 doc/xls/ppt 后缀,新后缀对应的文件用的就是Office Open XML文件格式。为了更好的理解文档追踪方案的优势和局限,所以学习了解一下相关文件格式规范。并这里简单记录一下在学习了解Office Open XML文件格式过程中的内容,方便后面有需要的时候再参考和回顾。

正文:

参考解答:
  1. Office Open XML 是什么?

Office Open XML(缩写:Open XML、OpenXML或OOXML),为由Microsoft开发的一种以XML为基础并以ZIP格式压缩的电子文件规范,支持文件、表格、幻灯片等文件格式。

OOXML在2006年12月成为了ECMA规范的一部分,编号为ECMA-376;并于2008年4月通过国际标准化组织的表决,在两个月后公布为ISO/IEC 29500国际标准。微软推出这个格式,很多人认为是出于商业考量。许多专家指出,该标准并不是个完整的标准,采用了许多微软的独有规格,使用上困难重重。

从Microsoft Office 2007开始,Office Open XML文件格式已经成为Microsoft Office默认的文件格式。Microsoft Office 2010支持对ECMA-376标准文档的读操作,ISO/IEC 29500 Transitional的读/写,ISO/IEC 29500 Strict的读取。Microsoft Office 2013同时支持ISO/IEC 29500 Strict的读写操作。

Starting with the 2007 Microsoft Office system, Microsoft Office uses the XML-based file formats, such as .docx, .xlsx, and .pptx. These formats and file name extensions apply to Microsoft Word, Microsoft Excel, and Microsoft PowerPoint.

  1. docx/xlsx/pptx 文件的结构
[Content_Types].xml #这个文件包含所有内容类型的列表。每个部件及其类型必须列在[Content_Types].xml中
_rels #用于配置定义各part间的关系,在part内部也会有各_rels子目录及关系文件
	.rels
docProps #存放属性相关内容
	app.xml #扩展属性
	core.xml #核心属性
	custom.xml #自定义属性(默认可能没有这个文件,需要添加自定义属性之后才会有该文件)

word #docx特有目录
	_rels
		document.xml.rels
	document.xml
	theme/
	...
或
xl #xlsx特有目录
	_rels
		workbook.xml.rels
	workbook.xml
	worksheets/
	theme/
	...
或
ppt #pptx特有目录
	_rels
		presentation.xml.rels
	presentation.xml
	slides/
	theme/
	...

docx文件内部结构
xlsx文件内部结构
pptx文件内部结构

  1. 以 docx 文件为例介绍内部文件的功能和作用
  • Content Types

根目录下的 [Content_Types].xml 文件

Every package must have a [Content_Types].xml, found at the root of the package. This file contains a list of all of the content types of the parts in the package. Every part and its type must be listed in [Content_Types].xml.

It’s important to keep this in mind when adding new parts to the package.

  • Relationships

根目录下的 _rels 目录(及各part内部目录中的 _rels 子目录)

Every package contains a relationships part that defines the relationships between the other parts and to resources outside of the package. This separates the relationships from content and makes it easy to change relationships without changing the sources that reference targets.

In addition to the relationships part for the package, each part that is the source of one or more relationships will have its own relationships part. Each such relationship part is found within a _rels sub-folder of the part and is named by appending ‘.rels’ to the name of the part. Typically the main content part (document.xml) has its own relationships part(document.xml.rels). It will contain relationships to the other parts of the content, such as styles.xml, themes,xml, and footer.xml, as well as the URIs for external links.

  • Parts Shared by Other OOXML Documents

根目录下的 docProps 目录(还有一些其他parts)

PartDescription
Embedded packageContains a complete package, either internal or external to the referencing package. For example, a WordprocessingML document might contain a spreadsheet or presentation document.
根目录下的docProps/目录文档的扩展/核心/自定义属性。
Font字体
Image图片。Documents often contain images. An image can be stored in a package as a zip item. The item must be identified by an image part relationship and the appropriate content type.
  • Parts Specific to WordprocessingML Documents

根目录下的 word 目录(xlsx是 xl 目录,pptx是 ppt 目录)

参考链接:

Office Open XML
https://zh.wikipedia.org/wiki/Office_Open_XML

什么是OOXML?
http://officeopenxml.com/

Open XML Formats and file name extensions
https://support.microsoft.com/en-us/office/open-xml-formats-and-file-name-extensions-5200d93c-3449-4380-8e11-31ef14555b18

Anatomy of a WordProcessingML File
http://officeopenxml.com/anatomyofOOXML.php

http://officeopenxml.com/anatomyofOOXML-xlsx.php

http://officeopenxml.com/anatomyofOOXML-pptx.php

ECMA-376 -> Office Open XML file formats (5th edition, December 2021)
https://www.ecma-international.org/publications-and-standards/standards/ecma-376/

微软在Office Open XML夹了多少私货?
https://www.zhihu.com/question/39196478

Office-OpenXML格式笔记
http://39.108.88.209/?id=12

=END=


《“Office Open XML文件规范学习”》 有 7 条评论

  1. 使用POI在Excel中添加外部图片
    https://www.iflym.com/index.php/code/201412280001.html
    Load remote image inside excel sheet
    https://user.poi.apache.narkive.com/hTQcxr6Z/load-remote-image-inside-excel-sheet

    Put hyperlink into image in excel (Apache POI)
    https://stackoverflow.com/questions/34171084/put-hyperlink-into-image-in-excel-apache-poi
    `
    When looking at how Excel stores this it seems to be stored differently for Images in the xl\drawings\_rels\drawing1.xml.rels and xl\drawings\drawing1.xml part of the XLSX file.
    `
    https://www.console.sbs/read-14796902.html

  2. DrawingML Overview
    http://officeopenxml.com/drwOverview.php
    `
    DrawingML is the language for defining graphical objects such as pictures, shapes, charts, and diagrams within ooxml documents. It also specifies package-wide appearance characteristics, i.e., the package’s theme. DrawingML is not a standalone markup language; it supports and appears within wordprocessingML, spreadsheetML, and presentationML documents. DrawingML is distinct from SVG and VML. SVG (scaleable vector graphics) is a graphics file format for two-dimensional graphics in XML. It is used mostly on the web and in desktop publishing. VML is a competing language for vector graphic files. It is now largely deprecated in favor of SVG. According to the ECMA OOXML specification, “The DrawingML format is a newer and richer format created with the goal of eventually replacing any uses of VML in the Office Open XML formats. VML is a transitional format; it is included in Office Open XML for legacy reasons only.” VML is still used extensively within Microsoft Word for certain graphic comnponents, in particular for things as shapes and text boxes.

    DrawingML 是在ooxml文档中定义图形对象(如图片、形状、图表和图解)的语言。它还指定了包范围的外观特征,即包的主题。DrawingML不是一种独立的标记语言;它支持并出现在wordprocessingML、spreadsheetML和presentationML文档中。DrawingML不同于SVG和VML。SVG(可伸缩矢量图形)是用于XML中的二维图形的图形文件格式,它主要用于网络和桌面出版。VML是一种用于矢量图形文件的竞争性语言,现在它在很大程度上已被SVG所弃用。根据ECMA OOXML规范,“DrawingML格式是一种更新、更丰富的格式,其目标是最终取代Office Open XML格式中VML的任何用途。VML是一种过渡格式;它被包含在Office Open XML中只是因为遗留问题。”在Microsoft Word中,VML仍然广泛用于某些图形组件,特别是形状和文本框。
    `

  3. 【技术分享】Office文档安全:以ODF和OOXML为例
    https://mp.weixin.qq.com/s/lSggmLxW5aT3MGh0JFxn9w
    `
    OOXML和ODF是用于文字处理、电子表格和演示文稿的事实上的标准数据格式。两种都是基于XML的功能丰富的容器格式,其历史可以追溯到2000年初期。在这项工作中对恶意Office文档的功能进行了系统的分析,将攻击分为五类:
    (1)拒绝服务攻击会影响在其上处理文档的主机。
    (2)跟踪文档使用情况进行隐私入侵攻击。
    (3)信息泄露攻击将使受害者计算机中的个人数据泄露。
    (4)在受害者的系统上进行数据操纵。
    (5)在受害者的机器上进行代码执行。

    本研究评估了Microsoft Office和LibreOffice –并发现它们都容易受到攻击,本文最后提出缓解策略以应对这些攻击。

    # 对策

    A.删除不安全的功能

    除了基于针对某些攻击的实施修复的短期缓解措施(例如,不允许XForms将数据提交到本地文件)之外,该标准还应删除很少使用的危险功能,例如在文档中包括外部文件的可能性。不幸的是,这取决于用例,并不总是很清楚哪些功能可以归类为“不安全”。例如,宏可用于良性目的,例如将公司的信笺插入文档中以及安装恶意软件。这种关于宏的全有或全无的方法值得商榷。一旦用户允许,它就可以通过设计使代码执行。通常,从安全性的角度来看,OOXML和ODF的功能丰富性是有问题的。作者认为,降低复杂性将使Office文档的安全性和隐私性受益。Microsoft Office和LibreOffice这两个主要的Office套件都可以从包含细化权限系统的现代体系结构中受益。例如,办公应用程序在访问相应的API时应向用户询问网络权限,即使允许使用宏,也应限制其功能(例如,使用沙箱)。

    B.默认情况下的隐私

    Office套件不应允许文档以静默方式打开网络连接。如果必须完全支持远程内容,则应在与第三方建立任何网络连接之前要求用户进行确认。此外,在默认设置中,应将保存或导出的文档中包含的元数据减少到最小,以防止意外泄露诸如用户名之类的潜在敏感信息。

    C.资源限制

    一旦解压缩后的数据的总大小超过上限,数据解压缩就应该停止。此缓解策略应由现代办公套件实施,以防止恶意文档消耗所有可用资源。

    D.消除歧义

    为了应对内容掩盖攻击,需要精确说明要处理和显示文档结构的哪些部分,从而不允许实现为解释提供空间。但是,必须指出的是,消除歧义和边界情况是一项具有挑战性的任务,因为OOXML和ODF标准非常复杂。此外,明确的规范只会保护文档结构,而不会阻止高级条件语句,例如嵌入在电子表格公式或宏,也可能会被滥用以根据某些预定义的条件显示模糊的内容。
    `

  4. 微软数据安全防护之Know Your Data
    https://mp.weixin.qq.com/s?__biz=MzI1MjQwMTAyOQ==&mid=2247483783&idx=1&sn=a9b0332b5a4813991bbd3df44ed15a47&scene=21#wechat_redirect
    `
    微软提供了两套数据安全基础服务。一个是Azure Information Protection,功能是数据分类,达标,以及防护。另一套是Azure Rights Management,进行权限认证。

    对于这个体系而言,Know Your Data就是一个很难的事情。这件事的难度在我看来是远高于传统安全中的攻击面分析。

    在Know Your Data部分,包括第一个是数据的识别,要知道哪些文件里面有敏感数据。微软使用了包括内置的常见的敏感信息类型的正则来识别数据类型。还支持机器学习训练分类器来识别敏感数据。众所周知,我大多数情况下对机器学习应用在网络安全防控上的态度都是反对的。但这里用来识别敏感数据,在我看来,这是一个恰当的场景,能够物尽其用。

    在数据识别后,敏感数据会被打上标签。标签有两个,一个是Sensitivity Label,敏感程度标签。这个大家都知道,就是秘密,机密,高度机密之类的。另一个是Retention Label,这个是留存标签,标记数据要留存的时间。

    当前并不需要通过Retention Label这种形式,进行文件粒度的留存设置。可以只通过对特定数据留存来满足需求。

    # Sensitivity Label
    我认为Sensitivity Label会成为DLP领域的基础设施,就像设备指纹之于业务风控。

    在文件防泄漏中,一直有个特别恶心的事情,如何标记一个文档是机密的?你在公司内网中,可以用公司的管控端,来收集每个文档信息,并且在服务端给该文档打标。但当你这个文件要共享给客户,允许客户内部进行分享,又该怎么办?

    这里的核心问题就是文件的机密标签应该是伴随着文件本身被传递的。同时,当文件进行跨应用传递时,其他应用要能识别出该标签。

    微软的Sensitivity Label是写在文件的meta信息中的。毕竟Office系列的文档格式都是微软自家的。微软提供了一套SDK来监控文件操作,从而识别以及写入标签信息。这里支持Windows, mac,ios和Android。这里说句题外话,微软这个拥抱云化的印度CEO真是牛逼的。这一下子相当于做了个跨平台的DLP基础设施。

    同时,可以使用它unified Labeling Platform来管理当前Sensitivity Label。这玩意儿给人的感觉类似于做风控时的设备指纹平台,管理所有设备指纹。

    # 使用Sensitivity Label和企业微信进行数据防护
    企业数据的流转一般用企业员工在自己的工作电脑上创建了对应的文件。

    分发途径会包括上传到网站上(例如上传内网供大家下载),通过企业聊天工具分发(通过企业微信发给对应的同事)。

    这个过程中涉及了以下应用软件,一个是本地的文件编辑器,包括Office类文件。第二个是浏览器,第三个是企业聊天软件。除此之外,可以对其他应用试图读取敏感文件的行为进行限制。

    Office本身就支持Sensitivity Label。对于浏览器而言,则需要相应的插件来支持。配置浏览器插件,对浏览器读取文件的操作进行监控,以及将浏览器下载的文件进行监控。对于企业聊天软件,需要聊天软件本身使用微软的SDK来支持。

    这里以企业微信为例。通过企业微信,其实可以非常好的进行数据安全防护方案设计。因为在里面可以拿到完整的人员组织架构信息,从而可以对文件的共享进行限制。同时,在企业微信端内进行数据流转,对敏感文件,只允许对外共享不允许另存为。避免文件被下发到手机端。

    当然,会有一些其他行为导致泄露检测变得更为复杂。最常见的就是文本复制,文件压缩,截屏。这三个地方需要设计更精细化的方案。

    ==
    # KNOW YOUR DATA
    Understand your data landscape and identify important data across your hybrid environment
    #了解你的数据
    了解您的数据环境并识别混合环境中的重要数据

    # PROTECT YOUR DATA
    Apply flexible protection actions including encryption, access restrictions and visual markings
    #保护您的数据
    应用灵活的保护措施,包括加密、访问限制和视觉标记

    # PREVENT DATA LOSS
    Detect risky behavior and prevent accidental oversharing of sensitive information
    #防止数据丢失
    检测危险行为,防止意外过度共享敏感信息

    # GOVERN YOUR DATA
    Automatically retain, delete and store data and records in a compliant manner
    #管理数据
    以合规的方式自动保留、删除和存储数据和记录

    智能平台驱动 – Powered by an intelligent platform
    Unified approach to automatic data classification, policy management, analytics and APls
    统一的自动数据分类、策略管理、分析和api方法
    `

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注