WPF皮肤皮肤安全问题

Eri*_*ips 7 .net security wpf

我是.Net框架中的WPF新手(不用了).我正在编写一个应用程序,通过简单地将.xaml(当前是一个Page元素)文件加载到一个框架中然后根据需要通过名称映射控件,可以非常自定义界面.我们的想法是建立一个人们,他们有兴趣制作皮肤,然后按照他们想要的方式涂抹我的应用程序(很像Winamp).

现在问题出现了,由于我缺乏Xaml知识,是否有可能创建恶意的Xaml页面,在下载和使用时可能有其他嵌入式Iframe或其他可能嵌入html或调用带有恶意内容的远程网页的元素?我相信情况可能如此.

如果是这种情况那么我有两个选择; 要么我有一个自动化过程,可以通过在允许下载之前检查它的元素来删除这些类型的Xaml文件(我认为这将是最困难的),或者在下载之前对它们进行人工审核.有没有我不知道的替代方案可以使整个过程变得更容易?

Ray*_*rns 4

如果您只是加载 XAML 而没有采取任何预防措施,则会出现两个潜在问题:

  1. XAML 可以使用“x:Static”和“ObjectDataSource”调用对象上的方法
  2. XAML 可以合并来自任意 Uris 的 HTML 和图像,因此如果 HTML 处理或图像处理代码中存在错误,恶意软件就可以利用它

解决方案有两个:

  1. 限制可以实例化的类。
  2. 仅将 Uri 属性的设置限制为相对源。

限制可以实例化的类

幸运的是,类型可以出现的位置有限:元素名称、附加属性名称、标记扩展、“Type”类型的属性。通过禁止除标准类型扩展之外的任何扩展,扫描所有用法并构建 XAML 中引用的类型的完整列表非常简单。这可以根据已知安全类型的白名单进行检查。任何不在安全列表中引用的类型都会导致 XAML 被拒绝。

注意:内置 XamlReader 不允许您提供自定义 IXamlTypeResolver。我使用我编写的增强型 XamlReader,它允许自定义 IXamlTypeResolver,因此我实际上可以在加载时和运行时检测 XAML 中引用的每种类型,而无需进行任何解析:只是无法解析不在白名单。

限制 Uri 属性的设置

XAML 的严格结构再次为我们提供了帮助。可以轻松扫描它以确定将调用的每个属性设置器以及要设置的值或绑定(不要忘记样式和附加属性)。如果使用除包 Uri 之外的任何绝对 Uri,则 XAML 可能会被拒绝。尝试使用标记扩展设置 Uri 也会被类似地拒绝。