Статьи Доклады с конференций

Автор: Николай Мациевский aka sunnybear
Презентация в .ppt

Зашифруй свой сайт

Клиентская оптимизация в информационной безопасности

Как ни странно, методы клиентской оптимизации очень сильно перекликаются с методами шифрования и защиты данных. Давайте рассмотрим основные направления деятельности при ускорении загрузки сайтов.

  • Меньше данных — скорость передачи данных по сети сильно ограничена.
  • Меньше запросов — каждый запрос обходится очень дорого как для клиентского браузера, так и для сервера.

Уменьшение размера файлов

При уменьшении файлов в размере из них удаляется вся информация, которая не нужна обычному посетителю сайта. Удивительно, но именно это помогает при защите сайта от несанкционированного доступа: чем меньше информации есть у злоумышленника, тем сложнее ему действовать.

Удаление комментариев

Очень часто в HTML-коде установленная на сайте система оставляет свою название и версию (например, Wordpress 2.7.1), что сильно помогает при идентификации возможных уязвимостей. Очевидно, что удаление это информации (которая находится в комментариях) увеличивает степень защищенности сайта.

Также в комментариях можно часто встретиться время создания страницы на сервере, число SQL-запросов и другую служебную информацию. Ее удаление не только уменьшает размер страницы, но и уменьшает вероятность взлома.

В CSS- и JavaScript-файлах в комментариях часто встречается название библиотеки, ее автор и дата создания. Эта информация также может быть с легкостью использована для анализа системы.

Сжатие и обфускация

Удаление ненужных (по спецификации) символов из текстовых файлов (HTML, CSS или JavaScript) позволяет убрать всю информацию о первоначальной структуре файлов (для HTML, например, это может быть характерные блоки подключаемых шаблонов) и значительно уменьшить читаемость кода. Также имеет смысл оставить только необходимые для страницы теги meta.

Дополнительная минимизация (YUI Compressor) и обфускация (Packer) JavaScript-файлов позволяет не только заменить первоначальные имена функций и переменных (что делает задачу идентификации используемой библиотеки крайне сложной, если вообще выполнимой), но и преобразовать весь JavaScript-файл в «пакет», который нужно пропустить через обратное преобразование или JavaScript-движок браузера, чтобы понять, что в нем заложено.

Мета-данные в изображении

Как ни странно, избыточная информация может содержаться не только в текстовых, но и графических файлах. В частности и в JPEG-, и в PNG-файлах есть возможность записать некоторые данные в комментариях. Естественно, что уменьшение размера изобоажений позволяет полностью удалить следы программного обеспечения, используемого для создания изображения.

Также мета-данные в JPEG-файле могут содержать название используемого фотоаппарата, дату создания фотографии и автора. Очевидно, что все эти данные лучше всего устранить, если речь идет о защите персональной информации.

Удаление заголовков

HTTP-заголовки сильно похожи на комментарии и meta-теги в плане передачи служебной информации. Удаление всех дополнительных заголовков не только увеличивает скорость загрузки страницы, но и делает ваш сервер более анонимным. Например, в случае использования легкого фронтенда (nginx, squid, 0W) информация о внутренней архитектуре может быть полностью скрыта (какой сервер или набор серверов используется для балансировки нагрузки и создания страниц). Если рассмотреть применение CDN, то тут ситуация полностью аналогичная.

Также иногда отдельные серверные расширения устанавливают свои заголовки для отладки. Очевидно, что на боевом сервере им нет места.

Для увеличения защищенности сервера также рекомендуется вместо заголовка Last-Modified (который содержит время последнего изменения файла) выдавать заголовок ETag (который обладает аналогичной функциональностью, но выдает произвольную строку, обычно md5-хэш).

Наконец если рассмотреть количество cookie, которые устанавливаются на сервере, то тут нужно обойтись необходимым минимумом: избыточное их количество как снижает скорость передачи данных по сети, так и обеспечивает злоумышленника дополнительной информацией.

Уменьшение числа запросов

Механизмы объединения различных файлов для уменьшения числа HTTP-запросов также позволяют скрыть от внешних пользователей часть информации в сайте. Иногда это может оказаться критичным.

Объединение текстовых файлов

При объединении CSS- или JavaScript-файлов обычно создается новый, имя которого является md5-хэшем от первоначальных данных (например, такой подход используется в Drupal, Joomla, PHP Speedy, Web Optimizer) и который размещается в специальной кэширующей папке. Такой подход позволяет свести к минимум информацию о дереве используемых папок и числе подключаемых модулей.

CSS Sprites

При использовании объединения изображений через технику CSS Sprites первоначальное изображение (например, логотип сайта) становится сложнее использовать: необходимо программное обеспечение для удаления «ненужных» частей. В совокупности с использованием его в качестве фона это может привести к значительным сложностям при воспроизведении определенной картинки на сторонних сайтах.

Дополнительно в итоговом спрайте может быть просто технически тяжело отыскать первоначальную картинку (особенно, если в итоговом изображении «зашифровано» несколько десятков картинок небольшого размера).

data:URI

В дополнение к технике CSS Sprites может использоваться data:URI и(ли) mhtml:URI подход для представления бинарных данных внутри CSS-файла. Очевидно, что для его расшифровки требуется специальное программное обеспечение.

Пост-загрузка ресурсов

Если говорить о методологии объединения файлов, то нельзя не упомянуть создание дерева загружаемых модулей (для минимизации трафика), что является альтернативой при большом количестве JavaScript-файлов. В этом случае отследить каждый используемый файл становится довольно тяжело и нужны специальные дополнения к браузерам (например, Firebug или HttpWatch) для оценки итогового DOM-дерева или каждого запроса между браузером и сервером. Естественно, что в некоторых, особо запутанных, случаях такой метод позволяет существенно обезопасить клиентское приложение от внешнего вторжения.

Дополнительные бонусы

В марте 2009 года вышла первая в России книга, посвященная основным прикладным вопросам клиентской оптимизации — Разгони свой сайт. Ее уже можно приобрести либо через само издательство,, либо через личный запрос.

Не так давно в России запустилась первая коммерческая сеть доставки содержания (CDN) — NGENIX. На данный момент она работают только с крупными организациями, однако в ближайшем будущем собираются расширяться и на сектор небольших по посещаемости и(ли) нагрузки сайтов.

Существуют бесплатные инструменты для автоматизированного создания как CSS Sprites, так и кроссбраузерного data:URI из исходных файлов.

Наконец, разрабатывается веб-приложение для автоматизации всех описанных действий по клиентской оптимизации — Web Optimizer. Его использование позволяет в значительной степени «скрыть» внутреннюю инфраструктуру сайта от внешних пользователей.

Спасибо за внимание. Вопросы?

Все комментарии (habrahabr.ru)