Skip to main content

V14.4.7 HTTP Security Headers

Requirement:#

Verify that the content of a web application cannot be embedded in a third-party site by default and that embedding of the exact resources is only allowed where necessary by using suitable Content-Security-Policy: frame-ancestors and X-Frame-Options response headers.

Explanation:#

Заголовок ответа X-Frame-Options HTTP может использоваться для указания того, разрешено ли браузеру отображать страницу в  \<frame>, \<iframe>, \<embed> или \<object>. Сайты могут использовать это для предотвращения атак типа click-jacking, гарантируя, что их контент не будет встроен в другие сайты.

Дополнительная безопасность обеспечивается только в том случае, если пользователь, получающий доступ к документу, использует браузер, поддерживающий X-Frame-Options.

Существует 2 возможных директивы X-Frame-Options:

X-Frame-Options: DENY
X-Frame-Options: SAMEORIGIN

DENY:

Страница не может быть отображена во фрейме, независимо от того, что сайт пытается это сделать.

SAMEORIGIN:

Страница может быть отображена только в том случае, если все фреймы-родители имеют одинаковое происхождение с самой страницей.

Content Security Policy (CSP) - это дополнительный уровень безопасности, позволяющий распознавать и устранять определённые типы атак, таких как Cross Site Scripting (XSS) и атаки внедрения данных. Спектр применения этих атак включает, но не ограничивается кражей данных, подменой страниц и распространением зловредного ПО.

Основная цель создания CSP заключается в устранении XSS-атак и сборе данных об их попытках. XSS-атаки используют доверие браузера к контенту, полученному с сервера. Зловредные скрипты исполняются в браузере жертвы, поскольку браузер доверяет источнику, даже когда скрипт поставляется не оттуда, откуда кажется.

CSP даёт возможность администраторам серверов снизить или полностью устранить вектора, по которым злоумышленники могут провести XSS, с помощью определения доменов, которые браузер клиента должен считать доверенными источниками исполняемых скриптов. В таком случае, браузер, совместимый с CSP, будет исполнять только те скрипты, которые были получены из списка разрешённых источников, и игнорировать прочие (в т.ч. встраиваемые скрипты и обработчики событий, указанные непосредственно в HTML-атрибутах).

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

Вы можете начать настройку Content-Security-Policy  с определения HTTP-заголовка и указания какую политику использовать:

Content-Security-Policy: policy

Где policy - это строка, содержащая директивы, описывающие вашу Content Security Policy.

Remediation:#

X-Frame-Options

  • Apache:

    Header set X-Frame-Options SAMEORIGIN

  • Nginx:

    add_header X-Frame-Options "SAMEORIGIN";

  • IIS:

    Add Custom HTTP Response Header -> Name: X-Frame-Options -> Value: SAMEORIGIN

  • Tomcat:

<filter>
<filter-name>httpHeaderSecurity</filter-name>
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
<init-param>
<param-name>antiClickJackingOption</param-name>
<param-value>SAMEORIGIN</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>httpHeaderSecurity</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>

Наиболее распространённые сценарии использования CSP:

Пример 1:

Вы хотите ограничить источники контента только исходным сервером (исключая поддомены)

Пример 1
Content-Security-Policy: default-src 'self'

Пример 2:

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

Пример 2
Content-Security-Policy: default-src 'self' *.trusted.com

Пример 3:

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

Пример 3
Content-Security-Policy: default-src 'self'; img-src *; media-src media1.com media2.com; script-src userscripts.example.com

Пример 4:

Вы хотите удостовериться, что весь получаемый контент для онлайн-банкинга идёт по SSL и атакующий не сможет обрабатывать запросы:

Пример 4
Content-Security-Policy: default-src https://mybank.by

Пример 5:

Для просмотра писем в почтовом клиенте вы хотите разрешить использование HTML внутри письма, а также позволить загрузку изображений из любых источников, но запретить использование любого JavaScript-кода и прочий потенциально опасный контент.

Пример 5
Content-Security-Policy: default-src 'self' *.mailsite.com; img-src *

Additional:#

Mozilla Documentation for Web-developers (CSP)

Mozilla Documentation for Web-developers (X-Frame-Options)