WPF皮肤皮肤安全问题

时间:2010-04-09 21:10:01

标签: .net wpf security

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

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

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

1 个答案:

答案 0 :(得分:3)

如果您只是在不采取任何预防措施的情况下加载XAML,则存在两个潜在问题:

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

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

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

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

      限制Uri属性的设置

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