Количество web ресурсов и облачных приложений неугомонно растет с каждым днем.
Владельцы ресурсов постоянно пытаются улучшить, расширить функционал, но почему то очень мало уделяют внимание вопросам безопасности их детищ. Есть множество разнообразных векторов атаки, которые могут использовать злоумышленники, но в этот раз я хочу вам рассказать о таком типе атаки как XSS. XSS (англ. Сross Site Sсriрting) это такой вид атаки, когда в код страницы встраиваются специальные скрипты, которые выполняются в браузере и в результате могут выполнять разнообразные действия как кража cookies, удаления или модификация аккаунта или выполнение действий от авторизованного пользователя.
В основном XSS можно разделить на 2 типа:
- Активные. Это когда в результате не достаточной фильтрации входных данных (не убираются символы < > ’ ”
&) возможно встраивание в страницу произвольного HTML кода. При загрузке такой страницы код выполняется браузером автоматически.
- Пассивные. Код встраивается в ссылку например:
http://foo.bar/search.php?q= При переходе по такой ссылке в следствии недостаточной фильтрации будет встроен и выполнен скрипт Другим видом атаки данного типа является самодостаточный XSS. Он основывается на поддержке браузерами протокола data: который позволяет AJAX приложениям генерировать DOC, PDF и другие форматы без использования серверной части. перейдя по ссылке вида: data:text/html;base64,PHNjcmlwdD4gYWxlcnQoIlNlbGYtY29udGFpbmVkIFhTUyIpOyA8L3NjcmlwdD4=
выполнится скрипт: Примеры для пассивного XSS:
Пример со ссылкой
Пример с data Как же противостоять атакам подобного рода? Против активного XSS может помочь только блокировка исполнения javascript, но это не выход поскольку современные web ресурсы в своем большинстве без включенного javascript работать не будут. Против пассивных XSS есть простое правило - не переходить по подозрительным ссылкам, даже если они находятся на том же домене что и сам сайт.
ЗЫ: Примеры уязвимостей уже пофиксили и они уже не работают.