代码之家  ›  专栏  ›  技术社区  ›  Erik Philips Gabriel Costa

WPF皮肤剥皮安全问题

  •  7
  • Erik Philips Gabriel Costa  · 技术社区  · 14 年前

    我对.Net框架中的WPF真的很陌生(别挡道了)。我正在编写一个应用程序,其中界面非常可定制,只需将.xaml(目前是一个页面元素)文件加载到一个框架中,然后根据需要通过名称映射控件。我们的想法是建立一个有兴趣制作皮肤的社区,让我的应用程序按他们的意愿(很像Winamp)。

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

    如果是这样的话,我有两个选择;我有一个自动化的过程,可以通过在允许下载之前检查Xaml文件的元素来删除这些类型的Xaml文件(我认为这是最困难的),或者在下载之前让人检查它们。有没有我不知道的其他方法可以让整个过程变得容易得多?

    1 回复  |  直到 14 年前
        1
  •  4
  •   Ray Burns    14 年前

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

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

    解决方案有两个方面:

    1. 将Uri属性的设置仅限于相对源。

    限制可以实例化的类

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

    限制Uri属性的设置

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