Книга: Безопасность веб-приложений. Исчерпывающий гид для начинающих разработчиков
Назад: Заголовки безопасности: ремни безопасности для веб-приложений
Дальше: Feature-Policy

X-Frame-Options

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

ВНИМАНИЕ. Заголовок X-Frame-Options устарел, вместо него в современных браузерах используется Content-Security-Policy (CSP). X-Frame-Options нужен для обратной совместимости старых браузеров и, надеюсь, будет постепенно выводиться из активного пользования.

Разрешить сайту использовать фреймы из вашего домена можно, установив для X-Frame-Options значение sameorigin:

X-Frame-Options: SAMEORIGIN

Запретить любые фреймы можно через значение deny в X-Frame-Options:

X-Frame-Options: DENY

X–Content-Type-Options

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

Заголовок безопасности X–Content-Type-Options инструктирует браузер не «обнюхивать» (определять или угадывать) тип содержимого данных, используемого в веб-приложении, а полагаться исключительно на тип, который был указан приложением. Браузеры любят думать, что могут предвидеть тип обслуживаемого содержимого, пытаясь быть полезными, но, к сожалению, данная функция превратилась в известную уязвимость, которую можно использовать во вред сайту. У данного заголовка безопасности есть только одна возможная настройка:

X–Content-Type-Options: nosniff

Referrer-Policy

Когда пользователь переходит с сайта на сайт, каждый предыдущий сайт отправляет следующему значение referrer – ссылку на страницу, с которой был совершен переход. Это очень полезная функция для тех, кто анализирует свой трафик: с ее помощью можно узнать, откуда приходят люди. Однако, находясь на сайте личного характера (например, с заявкой на ипотеку или с подробным описанием конкретного медицинского заболевания), пользователь, вероятно, не захочет, чтобы эти данные были отправлены на следующую страницу, которую он посетит. Для защиты конфиденциальности пользователей разработчик сайта может установить значение referrer так, чтобы передавался только домен, а не конкретная страница, на которой находился пользователь (то есть только wehackpurple.com, а не wehackpurple.com/embarrassing-blog-post-title), или вообще не передавалось никакое значение. Можно также изменить значение referrer в зависимости от того, «переходит» ли пользователь с HTTPS на HTTP.

Чтобы передавать информацию только о протоколе и домене, установите для referrer значение origin. Никакое другое условие не сможет изменить эту настройку.

Referrer-Policy: origin

Например, документ по адресу https://wehackpurple.com/page.html отправит ссылку https://wehackpurple.com.

Если пользователь покинет ваш домен, дальше будут переданы только протокол и домен, а если он находится в пределах домена – весь путь, что подходит для нечувствительных веб-сайтов:

Referrer-Policy: strict-origin-when-cross-origin

При отсутствии значения в поле referrer условие не имеет значения:

Referrer-Policy: no-referrer

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

Mozilla является лидером в данной области и предлагает замечательное техническое руководство: developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy.

Бонусный ресурс: получить больше информации по этой теме можно на сайте scotthelme.co.uk. Скотт Хельме – исследователь безопасности, который делится большим количеством сведений и инструментов по заголовкам безопасности.

Strict-Transport-Security (HSTS)

Этот заголовок безопасности превращает соединение в HTTPS (шифрует соединение), даже если пользователь попытался подключиться к сайту через HTTP. Таким образом, передаваемые данные будут зашифрованы принудительно. Пользователи, включая злоумышленников, не смогут перейти на HTTP (незашифрованное соединение), так как браузер принудительно переключит его на HTTPS перед загрузкой любых данных.



ОПРЕДЕЛЕНИЯ

Платформа как услуга (англ. Platform as a Service, PaaS) – услуга облачных вычислений, в рамках которой в облаке размещается программное обеспечение (обычно веб-приложение). Обслуживание PaaS (исправления или обновления версии) производится поставщиком облачных услуг.

Центр сертификации, или ЦС (англ. Certification authority, CA), – доверенная компания или организация, которая проверяет личность того, кто приобретает сертификат.

Фонд электронных рубежей (англ. Electronic Frontier Foundation, EFF) – международная некоммерческая организация, которая работает над защитой конфиденциальности и других прав в интернете.

Let’s Encrypt (букв. «Давайте зашифруем») – проект под управлением Фонда электронных рубежей (EFF), предлагающий бесплатные сертификаты шифрования. На момент написания книги Let’s Encrypt является единственным потребительским центром сертификации.

Wildcard-сертификат – сертификат, который распространяется на все поддомены, а не только на основной домен. При этом для всех поддоменов будет нужен один такой сертификат. Поддоменами является всё под знаком «*» в формуле: *.какой-угодно. домен.

Например, сертификат *.wehackpurple.com будет включать newsletter.wehackpurple.com, store.wehackpurple.com и www.wehackpurple.com.



Для правильной работы Strict-Transport-Security (HSTS) необходимо иметь выданный центром сертификации (ЦС) сертификат, установленный на веб-сервере, PaaS, контейнере или любом другом месте, где размещается приложение. Этот сертификат будет использоваться в процессе шифрования, и без него невозможно включить HSTS. При наличии поддоменов лучше получить сертификат под названием Wildcard. Желательно иметь сертификат с максимально возможным сроком действия (один год, а не три месяца), чтобы не тратить время на частую «ротацию сертификатов».

Необходимо также знать, сколько времени в секундах длится действие вашего сертификата. Нет, я не шучу, они решили измерять время в секундах. Подсказка: один год равняется 31 536 000 секундам:

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

СОВЕТ. Вы можете отправить свой домен на hstspreload.org и добавить суффикс preload. Google будет предварительно загружать сайт, тем самым не давая никому подключиться к нему через незашифрованное соединение. Хотя основные браузеры объявили о своем намерении начать применять эту функциональную возможность, она не является частью официальной спецификации HSTS.

Скорректированный синтаксис предыдущего примера станет таким: Strict-Transport-Security: max-age=31536000; includeSubDomains; preload.

Назад: Заголовки безопасности: ремни безопасности для веб-приложений
Дальше: Feature-Policy