Все мы знаем что Flash!-анимация и PNG-изображения давно плотно засели в web-проекты. Если Вы пишите свой собственный форум или нечто подобное то Вам не обойтись без аватар, это уже как стандарт. Но если недавно самой распространённой опасностью была загрузка PHP-скриптов через аватары, то сейчас на её место пришли картинки и Flash!-анимации несущие в себе вредоносный код.
Фильтрации поступающего контента сейчас разработчики уделяют много внимания, и никаких скриптов через аватару не загрузишь, но те же разработчики в упор не хотят понимать опасность как XSS так и изображений/анимаций несущих в себе вредоносный код.
Вы можете сказать что используйте htmlspecialchars() и ей подобные функции во всех местах где можно. Это хорошо. А фильтруете ли Вы изображения и Flash!-анимации поступающие к Вам на сайт? думаю 95% читателей ответят что нет. Как мне кажется причины 2:
Незнание как производить эту самую фильтрацию
Отношение к XSS как к «детской» атаке( Если Вы желаете узнать что можно сделать с помощью XSS то можете прочитать мою статью на данную тему [1]
Незнание того что атака через картинки и анимации возможна.
Ниже я рассмотрю способы безопасного использования картинок и анимаций поступающих от пользователей. Ещё хотелось бы заметить отдельно что вариант «запретить загрузку таких файлов» — это ни в коем случае не решение проблемы, так как цель любого программиста сделать проект максимально гибким и при этом максимально безопасным. А запрет загрузки PNG/SWF-файлов это безопасность в обмен на гибкость. Подобные решения принимаются только тогда когда надежды действительно нет, и бывает это очень редко.
Многие форумы (например IPB) позволяют загружать Flash!-анимации посетителям. Но в том же IPB написано что разрешать такие загрузки не желательно так как они могут повлиять на безопасность форума. А именно – через Flash!-анимацию можно провести XSS-нападение. Данная подпись почему то мало волнует администраторов и они разрешают загрузку Flash!. Если же Ваш сайт с загрузкой Flash! никак не связан то всё равно советую прочитать то что описано ниже. Лишним никогда не будет. Итак. Для начала давайте посмотрим как происходит само нападение. Например Flash!-ролик содержит следующий ActionScript-код:
getURL(«javascript:alert(‘XSS’)»);
Тогда при просмотре страницы с этим роликом пользователь увидит следующее сообщение:
Если в файле 1.swf содержится код вызывающий getURL то он просто не выполнится, причём на работу самого ролика и остального ActionScript-кода это не повлияет.
Обратите внимание на то что если не установить значение этой опции то оно автоматически будет приравнено к значению always, а значение always опции AllowScriptAccess разрешает вызов getURL. Вот и вариант защиты – добавлять опцию AllowScriptAccess.
Далее давайте обсудим защиты от атак с помощью PNG-картинок.