InfoPath 表单用户的安全问题
InfoPath 表单用户的安全问题
Microsoft Office InfoPath 2007 用户主要关心的安全问题与在 Windows Internet Explorer 中运行 Web 应用程序的那些用户所关心的安全问题类似。但是,您应当注意的是,为表单提供的安全级别仅仅取决于表单模板的位置,而不取决于用户在何处存储或打开其创建的 XML 文档。用户可通过查看 InfoPath 中的状态栏来确定其正在使用的表单模板的位置(本文还包含指向英文网页的链接)。
InfoPath 用于帮助保护用户,以防其受到由那些恶意编写的表单模板所造成的以下潜在威胁:
-
可能会泄露本地计算机或远程数据源中的敏感信息。
-
恶意使用 ActiveX 控件。
-
恶意使用 InfoPath 对象模型中的属性和方法。
泄露敏感信息
泄露敏感信息的最常见情形是,恶意表单作者创建的表单使用当前用户的安全凭据来访问另一个域(与部署了该表单本身的域不同)上的数据源。例如,恶意用户可能会通过电子邮件消息或使用 URL,将某个表单发送到私人企业或 Web 服务器上的表单中。该表单可能包含用于通过使用当前用户凭据来执行数据访问请求的脚本,以便检索恶意用户无法通过其他方法访问的另外一个域中的数据源数据(如工资数据库或其他敏感信息)。此类安全风险情形称为“跨域数据访问”。
作为 Microsoft InfoPath 构建基础的 Internet Explorer 安全模型提供了一个称为“跨域访问数据源”的设置。默认情况下,此设置将禁用那些驻留在 Internet 和受限站点安全区域中的 InfoPath 表单的跨域访问。此设置还会提示用户选择是允许还是禁止那些驻留在本地 Intranet 安全区域中的 InfoPath 表单的跨域访问并会启用那些驻留在“受信站点”或“本地计算机”区域中的 InfoPath 表单的跨域访问。
恶意使用 ActiveX 控件
恶意使用 ActiveX 控件的最常见情形是,恶意表单作者基于访问文件系统的 ActiveX 控件编写一个脚本,以检索个人文件和密码列表、删除文件或禁用用户系统。InfoPath 表单只能通过表单主要脚本编写文件 (script.js) 中的脚本或任务窗格中的脚本使用 ActiveX 控件。InfoPath 不允许 InfoPath 视图中的脚本运行 ActiveX 控件。
作为 InfoPath 构建基础的 Internet Explorer 安全模型提供了一个称为“对标记为非安全的 ActiveX 控件执行初始化和脚本编写”的设置。默认情况下,此设置将禁用那些驻留在本地 Intranet、Internet 和受限站点安全区域中的 InfoPath 表单的“对标记为非安全的 ActiveX 控件执行初始化和脚本编写”。此设置还会提示用户选择是允许还是禁止那些驻留在“受信站点”或“本地计算机”安全区域中的 InfoPath 表单的“对标记为非安全的 ActiveX 控件执行脚本编写”并会启用那些完全信任的 InfoPath 表单的“对标记为非安全的 ActiveX 控件执行脚本编写”。
另外,不管您位于哪个安全区域中,也不管表单的信任级别如何,在设计模式下,您不能将标记为执行初始化和脚本编写不安全的 ActiveX 控件插入到控件任务窗格中。
恶意使用 InfoPath 对象模型级别
同样,通过脚本调用的 InfoPath 方法和属性也会带来不同程度的风险。例如,可以使用 XDocument 对象的 SaveAs 方法将数据写入文件系统中的任何位置。为帮助防止恶意使用这些对象模型成员,InfoPath 对象模型实现了三个安全级别,用于确定如何以及在哪里使用特定对象模型成员。
InfoPath 表单开发人员的最佳做法
创建 InfoPath 表单的开发人员应知道如何实现以下最佳安全做法:
-
如何识别与表单关联的 XML 文件中存在的潜在安全问题。
-
如何避免将具有迷惑性或令人讨厌的错误消息呈现给表单用户。
-
如何签署 ActiveX 控件的 CAB 文件。
-
如何签署作为电子邮件消息附件发送的表单模板。
与表单关联的 XML 数据的最佳做法
请注意,InfoPath 表单可被注入来自任何源的 XML 数据,其中包括那些用户未必信任或未必能够控制的源。例如,InfoPath 可以从指向某个网页的链接获取 XML 数据,也可以从随电子邮件消息发送给用户的 XML 附件中获取 XML 数据。为降低这些风险,需知道以下最佳做法:
-
不要将读自 XML 的不受信任数据传递给 Microsoft JScript eval() 函数或任务窗格的 innerHTML 属性。这两个调用都能用来执行恶意脚本。在任务窗格中,可选择使用 innerText 属性。请注意,InfoPath 视图不能执行脚本。
-
从 XML 文件提交到数据库的数据如果在提交之前没有进行验证,会给数据库带来安全风险。
在将数据提交到数据源之前不对数据进行验证会对数据源中的数据完整性造成破坏,在更极端的情况下,可能会造成缓冲区溢出。如果您试图在服务器上直接使用不受信任的数据,还可能会造成脚本注入或 SQL 注入。
有关如何避免 XML 数据和 Microsoft XML Core Services (MSXML) 5.0 for Microsoft Office 代码中的安全风险的指导原则,请参阅 MSXML 5.0 SDK 参考文件中关于 XML 和安全的主题。要查看这些主题,请在 InfoPath 中打开 Microsoft 脚本编辑器,单击“帮助”,然后导航至此文档的“XML 和安全”部分。
避免提供具有迷惑性的错误消息的最佳做法
在同一个域中部署表单及其数据源 关于跨域数据访问的安全风险,大多数用户了解得不是很清楚。部署表单时将不断地警告和提示用户启用跨域数据访问,这使得许多用户不重视安全风险,同意所有跨域访问请求或是将发起域添加到用户的受信任站点列表中。为避免出现这种情形,请将 InfoPath 表单与表单所依赖的所有数据源部署在同一台服务器上。
避免使用没有标记为可以安全执行脚本编写的 ActiveX 控件 ActiveX 控件可能会泄露一些属性和方法,而这些属性和方法可能会被恶意用户加以利用,从而危及用户系统的安全,如用于访问计算机文件系统的方法。只要可能,您就应该只是使用那些标记为可以安全执行脚本编写的 ActiveX 控件。这些控件已经过测试,不管网页的脚本如何操纵控件的方法和属性,都能确保它们不会破坏用户系统或危及用户安全。同样,在创建要与 InfoPath 一起使用的 ActiveX 控件时,需严格检查代码并严格测试 ActiveX 控件,然后才能将其标记为可以安全执行脚本编写。
InfoPath 使用基于 Internet Explorer 安全区域的安全模型。因此,InfoPath 表单将使用与 Internet Explorer 相同的权限,即在默认情况下,允许脚本调用已标记为可以安全执行脚本编写的 ActiveX 控件,而不必提示用户。
管理 ActiveX 控件的 CAB 文件的最佳做法
ActiveX 控件可以驻留在表单模板中。如果这些控件的 CAB 文件还没有位于用户的计算机上,那么就一定要包括在表单模板文件 (.xsn) 中。为了安装包括在表单模板中的 CAB 文件,必须对这些文件执行数字签名。InfoPath 不会安装没有经过签署的 CAB 文件,而不管信任级别或安全区域如何。
为了确保 CAB 文件的数字签名通过验证,应该利用其中包含通往已信任证书根的信任链的证书来签署该文件。否则,签署不能通过身份验证,签署验证将失败,因此不会安装 CAB 文件。
作为电子邮件消息附件发送的表单模板的最佳做法
InfoPath 支持将表单模板部署为电子邮件消息附件以及将表单模板从一个位置移动到另一个位置。对您设计并打算部署为电子邮件消息附件的表单模板执行数字签名是一个很好的安全做法。对通过电子邮件消息部署的表单模板执行数字签名不但能够确保模板的真实性,还增加了自动更新表单模板的功能。
应该利用其中包含通往已信任证书根的信任链的证书来签署表单模板。如果不使用这样的证书进行签署,则由于签署不能通过身份验证从而导致签署验证失败。
InfoPath 托管代码表单开发人员的最佳做法
有关 InfoPath 托管代码表单模板的最佳安全做法的信息,请参阅包括在 Microsoft Visual Studio 2005 Tools for Applications (VSTA) 文档中的 InfoPath 帮助内容。

浙公网安备 33010602011771号