Вчера на официальном блоге Microsoft Internet Explorer были опубликованы сведения, касающиеся новых мер, направленных на повышение безопасности восьмой версии популярного браузера. Похоже, что разработчики IE всерьез занялись данным вопросом, – по крайней мере описание всех изменений в модели безопасности браузера выглядит внушительно =) В этом посте я затрону лишь самые любопытные на мой взгляд новшества.
Прежде всего это фильтр пассивных (или Type-1) XSS-атак. Как же действует данный фильтр? Все просто: если IE делает межсайтовый запрос, в составе которого присутствует некое выражение, похожее на XSS-вектор или его элемент, и при этом данная строка впоследствии отображается в содержимом страницы, то браузер просто изменит эту страницу, и злонамеренный код не выполнится. Да, вот и весь фильтр =) Правда как будет IE идентифицировать факт XSS пока загадка – ждем августа, когда выйдет вторая бета версия. Тем не менее, уже сейчас можно предположить, что в скором времени наверняка будет найдено множество различных методов обхода. Более того, разработчики позаботились о том, чтобы запрашиваемое веб-приложение могло отменить данный фильтр. Для этого в ответе должен содержаться HTTP-заголовок X-XSS-Protection, установленный в значение 0. Остается надеяться на грамотную реализацию фильтра, иначе это приведет к ложным срабатываниям, которые пользователям однозначно не понравятся.
Среди других изменений стоит отметить новые способы безопасной обработки HTML и JSON на клиентском уровне. IE8 представляет новый метод toStaticHTML(), вырезающий опасные конструкции из HTML-кода. Пример:
window.toStaticHTML("<b>HTML</b>, <i>HTML</i>, <u>HTML</u> и тут скрипты... <script>alert('в root мне логи!');</script>!");
получим:
<b>HTML</b>, <i>HTML</i>, <u>HTML</u> и тут скрипты... !
Как известно в JSON также можно вставить JS-код, который впоследствии может быть выполнен с помощью eval(). Очень часто такой прием используется в AJAX-приложениях, когда необходимо быстро получить и обработать объект с данными. В IE8 предусмотрен новый способ борьбы с подобного рода инъекциями, который достигается с помощью усовершенствованного метода JSON.parse().
Многочисленные изменения затронули механизм распознавания браузером истинного типа контента страниц. Если раньше IE7 распознавал страницу, содержащую тэги, как HTML-документ, совершенно не учитывая MIME-тип, то в IE8 подобная самодеятельность ужесточена. В первую очередь это касается псевдоизображений с MIME-типом image/*, внутри которых содержится HTML-код. Кроме того, веб-приложения теперь получают возможность запрета распознавания в IE типа содержимого: необходимо передать атрибут authoritative=true в заголовке Content-Type:
HTTP/1.1 200 OK Content-Length: 108 Date: Thu, 26 Jun 2008 22:06:28 GMT Content-Type: text/plain; authoritative=true; <html> <body> Теперь для IE8 это не HTML-страница </body> </html>
И, наконец, последняя особенность, связанная с MIME-типами: теперь с помощью заголовка X-Download-Options, установленного в noopen, можно заставить клиента сохранить документ на своем компьютере для дальнейшей работы. Авторы мотивируют полезность данной возможности тем, что открыв документ локально, пользователь оказывается вне контекста безопасности, что исключает многие риски.
Это лишь малая часть всех изменений, связанных с безопасностью. В этом плане новый Internet Explorer обещает стать самым соврешенным браузером. Чего стоит один XSS Filter, реализованный как обязательный компонент браузера, а не как надстроечный плагин. Как бы плохо к Microsoft не относились, но лично мне такой подход нравится. А вам? 😉
Leave a Reply