WPF Skinning Проблемы безопасности скинов - PullRequest
7 голосов
/ 10 апреля 2010

Я действительно новичок в WPF в .Net Framework (уберите это с дороги). Я пишу приложение, в котором интерфейс очень настраиваем, просто загружая файлы .xaml (в данный момент элемент Page) в кадр, а затем сопоставляя элементы управления с помощью имен по мере необходимости. Идея состоит в том, чтобы создать сообщество людей, заинтересованных в создании скинов, которые могут делать скин для моего приложения (как и в Winamp).

Теперь возникает вопрос, из-за моего отсутствия знаний Xaml, возможно ли создавать вредоносные страницы Xaml, которые при загрузке и использовании могли иметь другие встроенные элементы Iframes или другие элементы, которые могли бы встраивать html или вызывать удаленные веб-страницы с вредоносным контентом? Я считаю, что это может быть так.

Если это так, то у меня есть два варианта; Либо у меня есть автоматизированный процесс, который может удалять эти типы файлов Xaml, проверяя их элементы перед тем, как разрешить загрузку (что, я бы предположил, было бы наиболее трудным), либо попросить человека просмотреть их перед загрузкой. Есть ли альтернативы, о которых я не знаю, которые могли бы сделать весь этот процесс намного проще?

1 Ответ

3 голосов
/ 11 апреля 2010

Если вы просто загружаете XAML без каких-либо мер предосторожности, это может стать причиной двух возможных проблем:

  1. XAML может вызывать методы ваших объектов, используя «x: Static» и «ObjectDataSource»
  2. XAML может включать HTML и изображения из произвольного Uris, поэтому, если в коде HTML-обработки или обработки изображения есть ошибка, вредоносная программа может использовать его

Решение имеет два аспекта:

  1. Ограничить классы, которые могут быть созданы.
  2. Ограничить настройку свойств Uri только относительными источниками.

Ограничение классов, которые могут быть созданы

К счастью, количество типов мест может быть ограниченным: имена элементов, имена прикрепленных свойств, расширения разметки, свойства типа «Тип». Запрещая любые, кроме стандартных расширений типов, довольно просто сканировать все случаи использования и создать полный список типов, на которые есть ссылки в XAML. Это можно проверить по белому списку известных безопасных типов. Любые типы ссылок, которых нет в безопасном списке, приводят к отклонению XAML.

Примечание. Встроенный XamlReader не позволяет вам предоставлять пользовательский IXamlTypeResolver. Я использую улучшенный XamlReader, который я написал, который позволяет использовать пользовательский IXamlTypeResolver, так что я могу фактически обнаружить каждый тип, на который есть ссылка в XAML, во время загрузки и во время выполнения без какого-либо анализа: просто не удается разрешить любой тип типа, не находящийся на Белый список.

Ограничение настройки свойств Uri

Опять жесткая структура XAML приходит к нам на помощь. Его можно легко отсканировать, чтобы определить каждый установщик свойств, который будет вызываться, и значение или привязку, которые нужно установить (не забывайте стили и вложенные свойства). XAML может быть отклонен, если используется любой абсолютный Uri, кроме Uri пакета. Попытки установить Uri с использованием расширения разметки будут отклонены аналогичным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...