2010-04-09 19 views
7

Ich bin wirklich neu in der WPF im .Net Framework (bekommen, dass aus dem Weg). Ich schreibe eine Anwendung, wo die Schnittstelle sehr benutzerdefinierbar ist, indem einfach .xaml (im Moment ein Page Element) Dateien in einen Rahmen geladen werden und dann die Steuerelemente über Namen nach Bedarf zugeordnet werden. Die Idee ist, eine Gemeinschaft von Leuten zu haben, die daran interessiert sind, Skins zu machen, meine Anwendung zu skinsieren, wie sie wollen (ähnlich wie Winamp).WPF Haut Skinning Sicherheitsbedenken

Jetzt stellt sich die Frage, aufgrund meines Mangels an Xaml-Kenntnissen, ist es möglich, bösartige Xaml-Seiten zu erstellen, die beim Herunterladen andere eingebettete Iframes oder andere Elemente verwenden könnten, die HTML einbetten oder entfernte Webseiten mit bösartigem Inhalt aufrufen könnten ? Ich glaube, das könnte der Fall sein.

Wenn dies der Fall ist, dann habe ich zwei Möglichkeiten; Entweder habe ich einen automatisierten Prozess, der diese Arten von Xaml-Dateien entfernen kann, indem ich die Elemente vor dem Herunterladen überprüfe (was ich annehmen würde, dass es am schwierigsten wäre) oder sie vor dem Download einer menschlichen Überprüfung unterziehen. Gibt es Alternativen, von denen ich keine Ahnung habe, dass dies den ganzen Prozess viel einfacher machen könnte?

Antwort

3

Wenn Sie einfach nur die XAML laden, ohne irgendwelche Vorsichtsmaßnahmen gibt es zwei mögliche Bedenken:

  1. Die XAML Methoden auf Objekte aufrufen können mit „x: Static“ und „Object“
  2. Die XAML kann nehmen HTML und Bilder aus beliebigen Uris, so dass, wenn es einen Fehler in der HTML-Verarbeitung oder Bildverarbeitungs-Code ist es Malware könnte

ausnutzen die Lösung ist zweifach:

  1. Beschränken Sie die Klassen, die instanziiert werden können.
  2. Beschränken Sie die Einstellung von Uri-Eigenschaften nur auf relative Quellen.

die Klassen begrenzen, die

Glücklicherweise gibt es nur eine begrenzte Anzahl von Plätzen instanziiert werden können Typen vorkommen können: Name Element, Befestigt-Eigenschaftsnamen, Markup-Erweiterungen, Eigenschaften vom Typ „Typ“. Wenn Sie nur die Standardtyperweiterungen zulassen, können Sie ganz einfach nach allen Verwendungen suchen und eine vollständige Liste der Typen erstellen, auf die im XAML verwiesen wird. Dies kann gegen eine Positivliste bekannter Typen geprüft werden. Alle referenzierten Typen, die nicht auf der sicheren Liste stehen, führen dazu, dass XAML zurückgewiesen wird.

Hinweis: Mit dem integrierten XamlReader können Sie keinen benutzerdefinierten IXamlTypeResolver bereitstellen. Ich benutze einen erweiterten XamlReader, den ich geschrieben habe, der einen benutzerdefinierten IXamlTypeResolver erlaubt, so dass ich jeden Typ, auf den im XAML verwiesen wird, zum Laden und zur Laufzeit ohne überhaupt zu parsen feststellen kann: Es kann einfach keinen Typ Typ auflösen Whitelist.

die Einstellung von Uri Eigenschaften Beschränken

Auch die starre Struktur von XAML kommt uns zu Hilfe. Es kann leicht gescannt werden, um alle Eigenschaften-Setter zu bestimmen, die aufgerufen werden, und den Wert oder die Bindung, die festgelegt werden sollen (Stile und angehängte Eigenschaften nicht vergessen). Der XAML kann zurückgewiesen werden, wenn ein absoluter Uri außer einem Pack Uri verwendet wird. Versuche, eine Uri mit einer Markup-Erweiterung zu setzen, würden in ähnlicher Weise zurückgewiesen.

Verwandte Themen