Что такое заголовки безопасности HTTP и как их использовать?
Безопасность

Что такое заголовки безопасности HTTP и как их использовать?

Как вы можете повысить безопасность вашего сайта? Заголовки безопасности – это отличный и простой способ обезопасить ваших посетителей от хакеров

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

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

Что такое HTTP Strict-Transport-Security (HSTS)?

HTTP Strict Transport Security (HSTS) заставляет пользователей использовать HTTPS для каждого запроса, который они делают в своем браузере. Это надежный способ борьбы с кибератаками типа даунгрейдов и обеспечения безопасности всего трафика

Активировать HSTS довольно просто. Рассмотрим диалог между клиентом и сервером. Когда вы пытаетесь зайти на сайт через браузер, вы являетесь клиентом. Сайт, который вы хотите открыть, зависит от сервера. Ваша цель – сказать серверу: ‘Я хочу открыть этот сайт’. Это операция запроса. Сервер, в свою очередь, направляет вас на сайт, если вы удовлетворяете желаемым условиям

Помните об этом в отношении данного примера флага заголовка HTTP:

Strict-Transport-Security: max-age=16070200;

Когда вы добавите этот флаг к заголовочной информации HTTP-ответа, все пользовательские запросы станут HTTPS. Что бы пользователь ни написал здесь, браузер автоматически оценит протокол как HTTPS и установит защищенное соединение

Как использовать HSTS

Вместо того чтобы добавлять всю эту информацию о HTTP-заголовках на уровне кода, вы можете сделать это на Apache, IIS, Nginx, Tomcat и других приложениях веб-сервера

Чтобы включить HSTS в Apache:

LoadModule headers_module modules/mod_headers.so
<VirtualHost *:443>
Header always set Strict-Transport-Security 'max-age=2592000; includeSubDomains'
</VirtualHost>

Чтобы включить HSTS в Nginx:

add_header Strict-Transport-Security max-age=2592000; includeSubdomains

Чтобы включить HSTS с помощью веб.конфигурации IIS:

<system.webServer>
<httpProtocol>
<customHeaders>
<add name='Strict-Transport-Security' value='max-age=63072000'/>
</customHeaders>
</httpProtocol>
</system.webServer>

Для пользователей Cloudflare

Cloudflare предоставляет бесплатный HTTPS-сервис для всех желающих с помощью своей услуги Keyless SSL; перед тем как подать заявку на предварительную загрузку HSTS, вы должны знать, что ваш сертификат вам не принадлежит. Многие сайты используют SSL-сертификаты, потому что это простой способ обеспечить безопасность данных

Однако Cloudflare теперь поддерживает функцию HSTS. Вы можете активировать все функции HSTS, включая предварительную загрузку, через веб-интерфейс Cloudflare, не мучаясь с настройками на веб-сервере

Что такое X-Frame-Options?

X-Frame-Options – это заголовок безопасности, поддерживаемый всеми современными браузерами.X-Frame-Options направлен на защиту от кражи кликов, такой как Clickjacking. Как следует из названия, речь идет о работе уязвимого встроенного фрейма, также известного как iframe. Это элементы на сайте, которые встраивают другую HTML-страницу в ‘родительский’ сайт, так что вы можете использовать на своем сайте контент из других источников. Однако злоумышленники используют iframe под своим контролем, чтобы заставить пользователей выполнять действия, которых они не хотят

По этой причине необходимо предотвратить возможность злоумышленников найти iframe на сайте

Где и как использовать опции X-Frame-Options?

То, что делает X-Frame-Options, некоторые разработчики пытаются сделать с помощью таких языков, как JavaScript. Это не совсем неправильно. Однако риск все же есть, поскольку написанных кодов во многих аспектах недостаточно. Поэтому разумнее будет оставить эту задачу используемому вами интернет-браузеру

Однако, как разработчик, вы должны знать три параметра о X-Frame-Options:

  • Запретить: Полностью запретить вызов страницы в любом iframe.
  • SAMEORIGIN: Запретить вызов любого домена, кроме вашего собственного, внутри iframe.
  • ALLOW-FROM uri: Принимать вызовы iframe по URI, указанному в качестве параметра. Блокировать другие.
  • Здесь больше выделяется функция SAMEORIGIN. Потому что, хотя вы можете вызывать приложения на разных поддоменах с помощью iframe внутри друг друга, вы можете предотвратить их вызов на домене, находящемся под контролем злоумышленника

    Вот примеры использования SAMEORIGIN и X-Frame-Options в NGINX, Apache и IIS:

    Использование X-Frame-Options SAMEORIGIN для Nginx:

    add_header X-Frame-Options SAMEORIGIN;

    Использование X-Frame-Options SAMEORIGIN для Apache:

    Header always append X-Frame-Options SAMEORIGIN

    Использование X-Frame-Options SAMEORIGIN для IIS:

    <httpProtocol>
    <customHeaders>
    <add name='X-Frame-Options' value='SAMEORIGIN' />
    </customHeaders>
    </httpProtocol>

    Простое добавление заголовка SAMEORIGIN само по себе обеспечит большую безопасность для ваших посетителей

    Что такое X-XSS-защита?

    Использование информации заголовка X-XSS-Protection может защитить пользователей от XSS-атак. Прежде всего, необходимо устранить XSS-уязвимости на стороне приложения. После обеспечения безопасности на основе кода, необходимо принять дополнительные меры, т.е.заголовки X-XSS-Protection, необходимы для защиты от XSS-уязвимостей в браузерах

    Как использовать X-XSS-защиту

    Современные браузеры могут обнаруживать потенциальные XSS полезные нагрузки путем фильтрации генерируемого приложениями содержимого. Активировать эту функцию можно с помощью информации заголовка X-XSS-Protection

    Чтобы включить заголовок X-XSS-Protection в Nginx:

    add_header X-Frame-X-XSS-Protection 1;

    Чтобы включить заголовок X-XSS-Protection в Apache:

    Header always append X-XSS-Protection 1

    Чтобы включить заголовок X-XSS-Protection в IIS:

    <httpProtocol>
    <customHeaders>
    <add name='X-XSS-Protection' value='1' />
    </customHeaders>
    </httpProtocol>

    Чтобы предотвратить запуск блока кода с XSS-атакой по умолчанию, можно использовать что-то вроде этого:

    X-XSS-Protection: 1; mode=block

    Это незначительное изменение необходимо сделать, если существует потенциально опасная ситуация и вы хотите предотвратить вывод всего содержимого

    Что такое X-Content-Type-Options?

    Браузеры выполняют анализ, называемый MIME Type Sniffing, содержимого, представленного им веб-приложением. Например, если поступает запрос на доступ к файлу PDF или PNG, браузеры, выполняющие анализ ответа HTTP, делают вывод о типе файла

    Рассмотрим файл с расширением jpeg, который на самом деле имеет содержимое Text/HTML. После использования расширений и передачи защит в модуле загрузки файл успешно загружается. Загруженный файл вызывается по URL, и поиск по MIME Type возвращает Text/HTML в качестве результата. Он отображает содержимое как HTML. В этот момент и возникает XSS-уязвимость

    Поэтому вам нужно предотвратить принятие браузерами решения о содержимом путем обнюхивания MIME-типа. Для этого вы можете использовать nosniff

    Заголовок X-Content-Type-Options для Nginx:

    add_header X-Content-Type-Options nosniff;

    Заголовок X-Content-Type-Options для Apache:

    Header always X-Content-Type-Options nosniff

    Заголовок X-Content-Type-Options для IIS:

    <httpProtocol>
    <customHeaders>
    <add name='X-Content-Type-Options' value='nosniff' />
    </customHeaders>
    </httpProtocol>

    Что такое флаг куки HttpOnly?

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

    Однако существует возможность использовать куки для других целей, кроме передачи ключа сессии. Хакеры могут узнать данные пользователя с помощью вышеупомянутой XSS-уязвимости или посредством атаки Cross-Site Request Forgery (CSRF). Так какие же файлы cookie наиболее важны с точки зрения безопасности?

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

    Вот здесь и приходит на помощь HttpOnly. Ниже приведен пример того, каким должно быть назначение cookie:

    Set-Cookie: user=t=cdabe8a1c2153d726; path=/; HttpOnly

    Обратите внимание на значение HttpOnly, отправленное в операции Set-Cookie. Браузер увидит это и не будет обрабатывать значения с флагом HttpOnly при обращении к cookie через переменную document.cookie. Еще один флаг, используемый в процессе Set-Cookie, – это флаг Secure. Он указывает, что значение cookie будет добавлено в заголовок только для запросов HTTPS. Сайты электронной коммерции обычно используют его, поскольку хотят уменьшить сетевой трафик и повысить производительность

    Используя этот метод, вы можете скрыть важные данные пользователей, такие как имена пользователей, пароли и информацию о кредитных картах. Но существует проблема. Пользователям, завершившим процесс входа в систему, присваивается значение cookie без флага Secure. Пользователь может получить ключ сессии при выполнении HTTP-запроса к не-HTTPS ссылкам. Добавить флаг Secure очень просто:

    Set-Cookie: user=t=cdabe8a1c2153d726; path=/; Secure

    Когда не следует использовать HttpOnly? Если вы полагаетесь на Javascript, вам следует быть осторожным, так как это может сделать ваш сайт менее безопасным

    Маленькие шаги работают на более широкую веб-безопасность

    Для повышения безопасности веб-приложений вам не нужны передовые знания в области программного обеспечения и серверов. Изменив всего несколько строк, вы можете предотвратить некоторые серьезные атаки. Конечно, этого недостаточно. Однако это небольшой, но эффективный шаг для обеспечения безопасности веб-сайта. Знание – лучшее профилактическое средство, поэтому полезно также знать тонкие нюансы того, как HTTPS защищает данные при передаче

    Об авторе

    Алексей Белоусов

    Привет, меня зовут Филипп. Я фрилансер энтузиаст . В свободное время занимаюсь переводом статей и пишу о потребительских технологиях для широкого круга изданий , не переставая питать большую страсть ко всему мобильному =)

    Комментировать

    Оставить комментарий