Pull to refresh

Обзор безопасности Silverlight 4 приложений. Часть 2

Reading time 5 min
Views 2.1K
image В продолжению к первой части, в которой мы рассмотрели как Silverlight защищает конечного пользователя. В этой части рассмотрим как создавать безопасные сайты с использованием Silverlight. Все ссылки в конце топика.

Создание безопасных веб-сайтов использованием Silverlight


Сайты, использующие Silverlight имеют те же самые проблемы в безопасности, что и обычные сайты не использующие его.

Cross Site Scripting (XSS)

Как и в обычных HTML сайтах, Silverlight разработчикам нужно внимательно относиться к проблеме XSS. XSS позволяет злоумышленнику запускать программный код на компьютере клиента. Это дает злоумышленнику доступ к Cookies и другой конфиденциальной информации. Обладание этой информацией по разному влияет на безопасность. Для интернет-магазинов злоумышленник может заказать товары на имя пользователя. В банках можно сделать другие плохие вещи.

В Silverlight возможны XSS проблемы, но они менее вероятны чем в традиционных HTML. Проблемы возникают, когда злоумышленник посылает опасную строку в неконтролируемое поле. Вот некоторые примеры, когда возможна XSS уязвимость:
  • Вызов XamlReader.Load () на строку, переданную злоумышленником. Нельзя вызывать этот метод, предварительно не проверив строку на XSS.
  • Вызов Assembly.Load () на вредную DLL
  • Создание XML путем объединения строк, например, для того, чтобы отправить запрос на REST сервис. (System.Xml обеспечивает более эффективные способы создания XML, в том числе и System.Xml.XmlWriter System.Xml.Linq.XElement)
  • Использованием Silverlight для создания HTML через System.Windows.Browser
  • Использование System.Windows.Controls.WebBrowser.NavigateToString () в браузере из приложения.
  • Файлы .xap, загруженные пользователями.


Изоляция Silverlight с HTML / JavaScript

Silverlight запускается как часть HTML страницы, но что произойдет, если приложение не будет доверять HTML или наоборот? Silverlight позволяет заблокировать связь в обоих направлениях. По умолчанию заблокировано, когда .XAP и HTML загружаются с разных доменов.

Свойство EnableHtmlAccess позвоялет .XAP вызывать JavaScript методы и изменять HTML страницы. EnableHtmlAccess указывается в теге <object> при вставке Silverlight. Если .XAP и HTML из одного домена, то по умолчанию свойство включено иначе — нет.

Свойство ExternalCallersFromCrossDomain и атрибуты [ScriptableTypeAttribute] / [ScriptableMemberAttribute] указываются .XAP и позволяют контролировать, возможен ли вызов этих методов из JavaScript. Для того, чтобы JavaScript мог вызвать эти методы, он должен пройти проверку ExternalCallersFromCrossDomain и класс должен быть оформлен [ScriptableTypeAttribute], а данный метод — [ScriptableMemberAttribute]. JavaScript может вызывать только методы классов, указанных в приложении. ExternalCallersFromCrossDomain имеет две настройки, ScriptableOnly и NoAccess с NoAccess умолчанию.

Изоляция Silverlight кода из другого Silverlight кода

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

Передача данных между приложениями Silverlight

Silverlight приложения, работающих в отдельных тегах <object> могут общаться либо с помощью JavaScript либо с помощью System.Windows.Messaging.LocalMessageReceiver / LocalMessageSender. Обмен сообщениями позволяет приложениям отправить сообщения, а другим приложениям и получать их. По умолчанию отправители посылают, а получатели принимают сообщения только из тех приложений, что расположены на одном и том же домене. Можно добавить доверенные домена для отправителей и получателей. Клиенты могут использовать Глобальный охват. Им следует пользоваться осторожно, так как отправитель и получатель могут быть из любого домена. Нет возможности проверить на какой домен отсылается сообщение, однако получатель знает какой домен его отправил.

Предотвращение несанкционированного повторного использования файла. XAP

Чтобы проверить, что на странице размещается ваше .XAP, то нужно включить следующий код XAP в startup:
      If (App.Current.Host.Settings.EnableHTMLAccess == false)
        throw new Exception();
      string htmlurl = System.Windows.Browser.HtmlPage.Document.DocumentUri.ToString();
      if (htmlurl != “http://foo.com/mypage.html”)
        throw new Exception();

* This source code was highlighted with Source Code Highlighter.


Валидация на сервере

Приложения Silverlight не меняют способ проверки подлинности запросов на сервер.

Проверка входящих данных – как и не-Silverlight сайтов, на сервере необходимо убедиться, что входные данные не содержат команды SQL, HTML / JavaScript, которые впоследствии будут отображаться на странице. Имейте в виду, что злоумышленник может и не использовать Silverlight приложение, а напрямую отправить HTTP запросу серверу обойдя приложение.

Обеспечение безопасности сервисов — Silverlight приложения часто используют сервисы как связь между приложением и сервером. Эти интерфейсы должны быть защищены и проверены.

Подделка Кросс-доменных запросов (CSRF) – Веб серверы должны проверять, что запросы приходят с правильной страницы. Например посмотрим файл политики безопасности Microsoft http://microsoft.com/clientaccesspolicy.xml. Сайт указывает, какие URL могут делать кросс-доменные запросы.

Защита информации внутри. XAP

Хранение конфиденциальной информации (например, паролей, ключей, или собственных алгоритмов), в .XAP файле является проблематичным. В общем случае, не возможно защитить такую информацию от злоумышленника. Библиотеки могут быть закодированы с использованием .NET обфускаторов. Однако пока обфускация может замедлить злоумышленника, но не может помешать. Поиск также выдает, что есть и обфускаторы XAML разметки.

API для безопасности

Silverlight предлагает целый ряд служб безопасности и интерфейсов API для обеспечения целостности и конфиденциальности данных, передаваемых по сети.

Поддерживается HTTPS как для .XAP так и для любых запросов, которые он посылает. В Silverlight 4 Beta добавлена поддержка заголовка Referer, что позволяет серверу знать, откуда пришел пользователь. Нужно быть осторожным, используя заголовок Referer и не использовать его для проверки безопасности т.к. злоумышленник может установить любое значение в этот заголовок.

System.Security.Cryptography содержит интерфейсы для AES шифрования с закрытым ключом, SHA1 и SHA256 хэширования и цифровых подписей HMAC. (В Silverlight не входит шифрование с открытым ключом)

Silverlight поддерживает PlayReady digital rights management (DRM) для управления доступом к медиа-файлам. В Silverlight 4 Beta добавлена поддержка защиты H.264 и защиты оффлайн сценариев.

Заключение


Silverlight была построена с нуля с безопасностью в качестве первоочередной задачи. Silverlight изолирует веб-приложения, чтобы обезопасить пользователей от вредоносных веб-сайтов. Silverlight также помогает поддерживать ваш веб-сайт в безопасности от нападения, обеспечивая настройками по умолчанию и делая XSS ошибки труднореализуемыми. Понимание модели безопасности Silverlight помогает создавать безопасные веб-сайты, которые используют Silverlight.

Литература и ссылки


Tags:
Hubs:
+2
Comments 4
Comments Comments 4

Articles