Microsoft TechDayshttp://www.techdays.ru
Принципы безопасной разработки на SilverlightМихаил ЧерномордиковArchitect Evangelist, Microsofthttp://blogs.msdn.com/[email protected]
Microsoft TechDayshttp://www.techdays.ru
Содержание докладаУгрозы в Сети
Same-origin policyXSSCSRF
Silverlight и сетевая безопасностьОсновы работы SilverlightРабота в sandboxКросс-доменные запросыРабота с сокетами
Microsoft TechDayshttp://www.techdays.ru
Важность безопасности
Источник: secunia.com
Microsoft TechDayshttp://www.techdays.ru
Same-origin policy= site-of-origin policyТот же источник = доменное имя, портwww.testsite.ru, www.testsite2.ru:8080Если HTML-страница загружает iframe (или другой объект) с тем же источником, то открыт доступ к DOM-модели другой страницыHTML-страница может делать HTTP-запросы к источнику (обычно через XmlHttpRequest)
Microsoft TechDayshttp://www.techdays.ru
XSS = Cross-Site ScriptingМежсайтовый скриптингЗапуск кода (обычно JavaScript) от имени атакуемого сервераПорядка 15% всех обнаруженных уязвимостей*Основная поверхность атаки – серверная частьВозможное решение для пользователей – XSS-фильтр в IE8
* Источник: wikipedia.org
Microsoft TechDayshttp://www.techdays.ru
CSRF = Cross-Site Request Forgeries
Атакующий сайт делает запрос на атакуемый сервер так, что сервер думает, что это запрос от пользователя
Возможное решение – контрольная суммаВозможное решение – XDR-запросы в IE8
Microsoft TechDayshttp://www.techdays.ru
Содержание докладаУгрозы в Сети
Same-origin policyXSSCSRF
Silverlight и сетевая безопасностьОсновы работы SilverlightРабота в sandboxКросс-доменные запросыРабота с сокетами
Microsoft TechDayshttp://www.techdays.ru
Структура Silverlight-проектаВеб-проект,генерируемый Visual Studio для тестирования
Основной проект
Тестовая страница HTML
XAML-файл с глобальными ресурсами и обработчиками событийXAML-файл со страницей, которую видит пользователь
XAP файл со сборками приложения, библиотеками и ресурсами
Microsoft TechDayshttp://www.techdays.ru
Основы работы SilverlightЗагрузка при инструкции в HTML:
<object type=“application/x-silverlight-3”></object>
XAMLНе содержит кодМожет содержать обработчики событийНет гарантий по загрузке памяти и ЦП
XAPПуть указан в sourceZIP-архивAppManifest.xmlПри кросс-доменной загрузке источник = источник XAP-файла
Microsoft TechDayshttp://www.techdays.ru
Работа в sandboxXAP-файл загружается в «песочнице»Контекст безопасности может не совпадать со страницейПо умолчанию - модель iframe
Если same-origin, взаимодействие со страницей разрешеноЕсли нет – запрещено
Можно настраивать через параметрыEnableHtmlAccess – доступ к страницеExternalCallsFromCrossDomain – доступ к XAP
Microsoft TechDayshttp://www.techdays.ru
EnableHtmlAccessПо умолчанию falseEnableHtmlAccess = true
Доступ управляемогокода к DOM-моделиЭквивалентно элементу<script> в серединедокументаЕсли вредоносный XAP – XSS-уязвимость + чтение cookies + CSRFПомните, что домен может сменить хозяина
Про безопасность нужно помнить, учитывать, не бояться
Microsoft TechDayshttp://www.techdays.ru
ExternalCallersCrossDomainПо умолчанию NoAccess= ScriptableOnlyоткрывает доступ к [Scriptable]-объектамв коде XAP-файлаЛюбая HTML-страница может вызывать метод из XAP-файла с домена Х и возможно получить данные из домена ХЗадается в AppManifest.xml
Microsoft TechDayshttp://www.techdays.ru
Кросс-доменные запросыПо умолчанию доступ из Silverlight-приложений с других доменов запрещенЕго можно разрешить явным образом – файл clientaccesspolicy.xmlЕсть поддержка crossdomain.xmlСоветы по безопасности:
Используйте статические ресурсыНе используйте состоянияИспользуйте альтернативную аутентификациюИспользуйте субдомены (http://api.flickr.com)Открывайте доступ всем осознанно
Microsoft TechDayshttp://www.techdays.ru
Работа с сокетамиВ Silverlight возможно сетевое взаимодействие через TCP-сокетыЗадается в clientaccesspolicy.xmlНет CSRF-угрозы – нет HTTP и cookies Угроза – перехват трафика другими внутренними утилитами или приложениямиОграничение на порты – 4502-4534
Примеры кода
<object ...> <param name="enablehtmlaccess" value=“true"/> ... </object>
<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment" ExternalCallersFromCrossDomain="ScriptableOnly" .../>
<?xml version="1.0" encoding="utf-8"?><access-policy> <cross-domain-access> <policy> <allow-from http-request-headers="*"> <domain uri="http://contoso.com"/> </allow-from> <grant-to> <resource path="/" include-subpaths="true"/> </grant-to> </policy> </cross-domain-access></access-policy>
Microsoft TechDayshttp://www.techdays.ru
Полезные ссылкиОнлайн-доклады по безопасностиhttp://www.techdays.ru/Category.aspx?Tag=Security
Руководство “Security Guidance for Writing and Deploying Silverlight Applications”http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=7cef15a8-8ae6-48eb-9621-ee35c2547773
Онлайн-доклыды по Silverlighthttp://www.techdays.ru/Category.aspx?Tag=Silverlight
Центр разработки Silverlight на MSDNhttp://msdn.microsoft.com/ru-ru/Silverlight
Making a Service Available Across Domain Boundaries: http://msdn.microsoft.com/en-us/library/cc197955(VS.95).aspxEnableHtmlAccess: http://msdn.microsoft.com/en-us/library/cc838264(VS.95).aspxExternalCallersFromCrossDomain: http://msdn.microsoft.com/en-us/library/system.windows.deployment.externalcallersfromcrossdomain(VS.95).aspx
Microsoft TechDayshttp://www.techdays.ru
Принципы безопасной разработки на SilverlightМихаил ЧерномордиковArchitect Evangelist, Microsofthttp://blogs.msdn.com/[email protected]