Обеспечение доступности

Рейтинг HTTP-заголовков для защиты сайта

Для защиты сайта не всегда достаточно устранить все уязвимости и быть защищенным от DDoS-атак. Реализация различных веб-стандартов позволяет использовать сайт очень по-разному, в том числе, и для злого умысла. Мы собрали топ10 наиболее значимых HTTP-заголовков, которые могут на это повлиять.

Nosniff

Рейтинг наиболее опасных к использованию возможностей браузера возглавляет возможность Internet Explorer «угадывать» тип файла, игнорируя его MIME-тип (обычно соответствует расширению файла). При передаче от сервера к браузеру все файлы имеют тот или иной тип (css, javascript, jpeg, xml и т. д.), который прямо указывает на суть содержимого файла. Однако, Internet Explorer имеет встроенный механизм, который позволяет по содержимому файла переопределить его тип. Таким образом, обычные текстовые файлы могут быть интерпретированы как JavaScript со всеми вытекающими последствиями. Например, если у вас на сайте запрещена загрузка текстовых файлов с расширениями .js пользователями, то они могут загрузить в виде картинок текстовый файл, содержащий JavaScript-код, который может быть исполнен браузером.

Для отключения такого поведения Internet Explorer достаточно добавить заголовок на стороне сервера
X-Content-Type-Options: nosniff
Он добавляется для всех сайтов, подключенных к Айри, для которых выбрана базовая защита (или включен Антивирус в правилах ускорения и защиты сайта).

Подробнее на MSDN и SecurityHeaders.

X-Frame-Options

Один из наиболее используемых векторов атаки — вызов сайта в скрытом фрейме на стороннем ресурсе. Это может быть и скликивание рекламного бюджета, и скрытая DDoS-атака. Но этого можно избежать, и разрешить вставлять фреймы с сайтом только с самого сайта. Отвечает за это заголовок X-Frame-Options:

X-Frame-Options: SAMEORIGIN

SAMEORIGIN разрешает использование фреймов только с самого сайта (например, для слайд-шоу или визуального редактора). DENY полностью запрещает использование сайта во фреймах. В Айри используется первый вариант при включенном Антивирусе.

Подробнее на MSDN, MDN и SecurityHeaders.

Content Security Policy

Но самая значительная защита против любых типов XSS содержится в заголовке Content Security Policy: он позволяет указать браузеру, с каких доменов могут быть загружены сторонние скрипты на сайт. Мощность данного решения соизмерима только с тяжестью его практической реализации: для всех сторонних виджетов (счетчиков, статистики, социальных кнопок и т. д.) необходимо задать имя скрипта и его тип в HTTP-заголовке. Например:

Content-Security-Policy: script-src 'self' https://xn--80aqc2a.xn--p1ai/airee_apis.google.com

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

Детальное руководство по CSP и подробнее на SecurityHeaders.

X-XSS-Protection

Следующим в рейтинге идет возможность Internet Explorer блокировать некоторые наиболее распространенные векторы XSS-атаки (например, тег script в URL страницы). Большой пользы от такого решения нет, но часть угроз оно позволяет отсечь. Пример использования Включаем защиту, блокируем выполнение вредоносных скриптов):

X-XSS-Protection: 1; mode=block

По умолчанию, такой механизм защиты включается в Айри при выборе базовой защиты или Антивируса в настройках сайта.

Подробнее на MSDN и SecurityHeaders

HTTP Strict Transport Security

Более полезным с практической стороны является заголовок Strict-Transport-Security: он запрещает использование незащищенного (HTTP) соединения на сайте, если есть защищенное (HTTPS). Таким образом, все данные пользователей сайта будут защищены в любом случае. Пример использования:

Strict-Transport-Security: max-age=31536000; includeSubDomains

Для применения этой техники защиты необходим SSL-сертификат для сайта и отсутствие вызовов по незащищенному протоколу сторонних ресурсов (виджетов) на сайте. В Айри есть возможность включить продвинутую защиту сайта по SSL, которая не только блокирует вызовы сайта не незащищенному протоколу, но и указывает на это браузерам.

Описание стандарта на Network Working Group и SecurityHeaders

Access Control Allow Origin

Напрямую на защищенность сайта не влияет, но позволяет защитить права сайта на вызываемые файлы заголовок Access-Control-Allow-Origin. Для каждого файла он может регламентировать, откуда этот файл может быть вызван (список сторонних сайтов). И уже браузеры позаботятся о том, чтобы блокировать отображение этого файла вовне.

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

Access-Control-Allow-Origin: http://www.example-social-network.com

По умолчанию, для всех файлов сайтов, подключенных к Айри (кроме шрифтов) такой заголовок не выставляется. Но есть возможность запретить вызов любых статических файлов защищаемого сайта с других ресурсов. Дополнительно вам может потребоваться выставить Access-Control-Allow-Credentials: true, чтобы браузер мог пересылать и cookie между серверами.

Подробнее на MDN и SecurityHeaders

Cross Domain Meta Policy

Аналогично механизму браузеров блокировки стороннего контента Adobe Flash имеет свой. Он регулируется файлами crossdomain.xml сайта, начиная с корневого каталога. Проблема с механизмом в том, что на любом уровне вложенности корневой регулирующий файл (политика безопасности) может быть переопределен. Чтобы избежать таких ситуаций, необходимо задать следующий HTTP-заголовок, который заблокирует переопределение корневого файла:

X-Permitted-Cross-Domain-Policies: master-only

Для сайтов, подключенных к Айри, при включении Антивируса или Базовой защиты такой заголовок отдается, по умолчанию.

Подробнее на сайте Adobe и SecurityHeaders

Серверные заголовки

Заголовки Server, X-Powered-By, X-CMS-Version, X-Powered-CMS, X-Generator, X-Generated-By, X-AspNet-Version и некоторые другие могут содержать важную информацию о серверном окружении сайта, что позволит использовать характерные уязвимости и ускорить взлом.

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

Проверка заголовков

Большинство заголовков можно проверить при помощи сервиса SecurityHeaders. Пользуйтесь на здоровье!