2010-04-09 19 views
7

Soy realmente nuevo en WPF en .Net Framework (lo sacan del camino). Estoy escribiendo una aplicación donde la interfaz es muy personalizable simplemente cargando archivos .xaml (actualmente un elemento de página) en un marco y luego mapeando los controles a través de nombres según sea necesario. La idea es tener una comunidad de personas que estén interesadas en hacer máscaras, proteger mi aplicación como quieran (al igual que Winamp).WPF Skin Skinning Security Preocupaciones

Ahora surge la pregunta, debido a mi falta de conocimiento Xaml, es posible crear páginas Xaml maliciosas que, cuando se descarguen y utilicen, podrían tener otros Iframes incrustados u otros elementos que podrían incorporar html o llamar a páginas web remotas con contenido malicioso ? Creo que este podría ser el caso.

Si este es el caso, entonces tengo dos opciones; o bien tengo un proceso automatizado que puede eliminar estos tipos de archivos Xaml verificando sus elementos antes de permitir la descarga (que supongo que sería más difícil) o que un ser humano los revise antes de descargarlos. ¿Hay alternativas que desconozco que podrían hacer que todo este proceso sea mucho más fácil?

Respuesta

3

Si simplemente carga el XAML sin tomar ninguna precaución hay dos problemas potenciales:

  1. El XAML puede llamar a métodos en los objetos usando "x: Estático" y "ObjectDataSource"
  2. El XAML puede incorporar HTML y las imágenes de Uris arbitraria, por lo que si hay un error en el código de procesamiento de HTML o de procesamiento de imágenes, el malware podría explotarlo

la solución es doble:

  1. Limite las clases que se pueden crear instancias.
  2. Restringe la configuración de las propiedades de Uri solo a fuentes relativas.

Limitar las clases que se pueden crear instancias

Afortunadamente, hay sólo un número limitado de lugares pueden aparecer tipos: Los nombres de elementos, los nombres de propiedad adjunta, extensiones de marcado, las propiedades de tipo "Tipo". Al no permitir ninguna extensión que no sea de tipo estándar, es bastante sencillo buscar todos los usos y crear una lista completa de los tipos a los que se hace referencia en el XAML. Esto se puede comparar con una lista blanca de tipos conocidos seguros. Todos los tipos a los que se hace referencia que no están en la lista segura provocan que se rechace el XAML.

Nota: El XamlReader incorporado no le permite proporcionar un IXamlTypeResolver personalizado. Uso un XamlReader mejorado. Escribí eso que permite un IXamlTypeResolver personalizado, así que puedo detectar todos los tipos a los que se hace referencia en el XAML en tiempo de carga y tiempo de ejecución sin hacer ningún análisis: simplemente no puedo resolver ningún tipo de tipo que no esté en el lista blanca

La restricción de la configuración de las propiedades de Uri

Una vez más la estructura rígida de XAML viene en nuestra ayuda. Se puede escanear fácilmente para determinar cada sistema de propiedad que se llamará y se establecerá el valor o el enlace (no olvide los estilos y las propiedades adjuntas). El XAML puede rechazarse si se utiliza un Uri absoluto, excepto un paquete Uri. Los intentos de establecer un Uri utilizando una extensión de marcado se rechazarán de forma similar.