G|Translate: English EN Français FR Deutsch DE Italiano IT Русский RU Español ES

HTTP заголовки безопасности

5/5 - (2 голоса)

Что это за загадочные письмена?

HTTP заголовки безопасности

В процессе запроса сайта с сервера — браузер и сервер обмениваются информацией. Сервер может заранее сообщить браузеру, что можно и что нельзя делать с сайтом.

Про взаимодействие браузера и сервера читаем здесь

Security HTTP Headers для «чайников»

Например сервер может указать браузеру:

  • сразу переходить на HTTPS-версию
  • запрещать открывать сайт во фрейме
  • и так далее

За это как раз отвечают HTTP заголовки безопасности.

Проверить свой сайт можно на ресурсе

https://securityheaders.com/

HTTP заголовки безопасности

Для сайта https://seotable.ru/ всё хорошо.

На ресурсе также ведется своя статистика тестирования

HTTP заголовки безопасности

1 408 191 / 134 749 409 = всего 1% протестированных сайтов имеют все необходимые HTTP заголовки безопасности.

За эту красоту отвечают настройки в Apache в файле .htaccess

# HTTP security headers
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Content-Security-Policy "upgrade-insecure-requests"
Header always set X-XSS-Protection "1; mode=block"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy: "strict-origin-when-cross-origin"
Header always set Permissions-Policy "interest-cohort=(), geolocation=(),midi=(),sync-xhr=(),microphone=(),camera=(),magnetometer=(),gyroscope=(),fullscreen=(self),payment=()"
Header always set Expect-CT "max-age=7776000, enforce"
</IfModule> 
#

Конструкция <IfModule mod_headers.c>…</IfModule> нужна для исключения ошибки, если модуль HTTP заголовков mod_headers.c не установлен в Apache.

В чем разница между Header always set и Header set в Apache? Без «always» Ваши заголовки будут выставляться только на успешные ответы сервера 200 OK.

Примечание: включить HTTP заголовки безопасности можно также:

  • через настройки Nginx
  • с помощью PHP функции header() — например, в WordPress можно список заголовков через эту функцию добавить прямо в файл wp-config.php (это же исполняемый файл PHP) или использовать функцию wp_headers() в файле function.php или в плагине
  • с помощью метатегов HTML <META HTTP-EQUIV=»имя» CONTENT=»содержимое»> в разделе <head>…</head>

ВАЖНО:  META-теги с атрибутом HTTP-EQUIV эквивалентны HTTP-заголовкам. Теги такой формы могут дать такой же эффект, что и HTTP-заголовки, и на некоторых серверах автоматически могут быть переведены в настоящие HTTP-заголовки. Некоторые генерируемые сервером поля заголовков не могут быть подменены значениями из META-тегов (в частности Date), другие подменяются только при ненормальном статус-коде (<>200). Когда заголовок не понятен, то значение HTTP-заголовка превалирует над значением META-тегов.

Вот в этой статье подробнее

Какие бывают META теги и зачем они нужны

Заголовок HTTP Strict Transport Security (HSTS)

Самый известный заголовок Strict Transport Security (HSTS) — это механизм политики безопасности, который позволяет защитить сайт от попытки небезопасного соединения.

У хороших хостеров включается кнопкой в панели управления при подключении HTTPS

HTTP заголовки безопасности

Суть HSTS —  при установлении соединения с сервером браузер будет сразу использоваться протокол HTTPS, не дожидаясь переадресации с HTTP.

Тоже самое можно реализовать вручную, указав дополнительную инструкцию в файле .htaccess

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

Принимаемые значения:

  • max-age=31536000 время в секундах (1 год минимум), которое браузер должен помнить о заголовке.
  • includeSubDomains Если указать это опциональное значение, то заголовок распространяется и на все поддомены (соответственно и поддомены должны иметь SSL-сертификат и HTTPS протокол).
  • preload если владелец сайта хочет, чтобы домен попал в предопределённый список, поддерживаемый Chrome (и используемый Firefox и Safari)

Если Вы включили настройку HTST у хостера (Nginx) и дополнительно прописали этот же заголовок в Apache — получите предупреждение о дублировании

HTTP заголовки безопасности

Проверить использовании заголовка HSTS можно с помощью сервиса

https://hstspreload.org/

Посмотрим на результат

HTTP заголовки безопасности

Тоже все хорошо. Предлагается добавить проверяемый сайт в листинг браузера Хром (т.к. есть директива preload).

HSTS preload list — это листинг сайтов chromium.org, которые по умолчанию в браузере будут открываться сразу только по HTTPS, даже если пользователь попытается обратиться к домену по http. Листинг используется большинством современных браузеров.

Возможные ошибки:

  • заголовок HSTS включен в Nginx и в Apache (и возможно где-то еще)
  • HTTP заголовки безопасности
  • нет директивы includeSubDomains или preload
  • время в секундах слишком маленькое (рекомендуется 31536000 сек = 1 год)

HTTP заголовки безопасности

Заголовок HTTP X-Frame-Options

Злоумышленник направил вас на свой веб-сайт, на котором отображается очень привлекательная ссылка для нажатия. К сожалению, он также встроил в страницу <iframe> your-bank.com/transfer?amount=-1&[attacker@gmail.com]</iframe>, но скрыл его, установив прозрачность на 0%.

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

Заголовок X-Frame-Options служит инструкцией для браузера не загружать Вашу страницу в frame/iframe. Не все браузеры поддерживают этот вариант — нужно проверять.

Инструкция в файле .htaccess

Header always set X-Frame-Options "SAMEORIGIN"

Параметры:

  • SAMEORIGIN позволяет загрузку контента в frame/iframe только если фрейм и страница, его загружающая, расположены на одном домене
  • DENY запрещает загрузку контента в frame/iframe
  • ALLOW-FROM допускает загрузку контента в фреймах только для определенного URI

Заголовок X-Frame-Options считался лучшим способом предотвращения атак с использованием щелчков на основе фреймов до тех пор, пока через несколько лет не вступил в игру еще один заголовок — Content Security Policy или CSP для краткости.

Заголовок HTTP Content-Security-Policy (CSP)

Content Security Policy (CSP), что в переводе означает «Политика безопасности контента». Допустим у Вас есть сайт, на котором вы показываете рекламу пользователям и честно зарабатываете деньги. И всё идёт хорошо, пока к вам не начнут ходит пользователи с заражёнными браузерами. Заражённый браузер будет подменять рекламу на вашем сайте на свою и показывать её пользователю.

Злоумышленник может создать определенную ссылку, которая выполняет произвольный JavaScript в браузере жертвы.

Инструкция в файле .htaccess

Header always set Content-Security-Policy "upgrade-insecure-requests"

Указатель upgrade-insecure-requests заставляет браузер волшебным образом переделать все HTTP-запросы в HTTPS-запросы.

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

Интересным вариантом CSP является режим только для отчетов. Вместо того чтобы использовать заголовок Content-Security-Policy, вы можете сначала проверить влияние CSP на ваш сайт, сказав браузеру просто сообщать об ошибках, не блокируя выполнение скрипта и т. д., Используя заголовок Content-Security-Policy-Report-Only.

Заголовок HTTP X-XSS-Protection

Несмотря на то, что он заменен CSP, заголовок X-XSS-Protection обеспечивает аналогичный тип защиты. Этот заголовок используется для блокировки атак XSS в старых браузерах, которые не полностью поддерживают CSP. Этот заголовок не поддерживается Firefox.

Инструкция в файле .htaccess

Header always set X-XSS-Protection "1; mode=block"

Заголовок ответа HTTP X-XSS-Protection  останавливает загрузку страниц при обнаружении XSS атаки.

Например, от этого в адресной строке —  http://www.site.com/page.php?var=<script>alert(‘xss’);</script>

Читаем статью

XSS глазами злоумышленника

Заголовок HTTP X-Content-Type-Options

HTTP-заголовок ответа X-Content-Type-Options является маркером, используемым сервером для указания того, что типы MIME, объявленные в заголовках Content-Type, должны соблюдаться и не изменяться. Это позволяет отказаться предотвратить подмену типов MIME.

Другими словами — при загрузке файла картинки на сервер злоумышленник пытается загрузить исполняемый скрип под названием picture.jpg

Инструкция в файле .htaccess

Header always set X-Content-Type-Options "nosniff"

Этот HTTP-заголовок был введен Microsoft в IE 8 как способ  блокировать происходящий перехват содержимого преобразовывать неисполняемые типы MIME в исполняемые типы MIME. С тех пор другие браузеры внедрили его, даже если их алгоритмы обработки MIME были менее агрессивными.

Заголовок HTTP Referrer-Policy

Знание полного URL-адреса, с которого пришел посетитель, включая аргументы запроса, может раскрыть термины последнего поискового запроса или личные данные, такие как адрес электронной почты.

Инструкция в файле .htaccess

Header always set Referrer-Policy: "strict-origin-when-cross-origin"

Возможные значения:

  • «no-referrer-when-downgrade» – это значение по умолчанию: Referer отправляется всегда, если только мы не отправим запрос из HTTPS в HTTP (из более безопасного протокола в менее безопасный).
  • «no-referrer» – никогда не отправлять Referer.
  • «origin» – отправлять в Referer только текущий источник, а не полный URL-адрес страницы, например, посылать только http://site.com вместо http://site.com/path.
  • «origin-when-cross-origin» – отправлять полный Referer для запросов в пределах текущего источника, но для запросов на другой источник отправлять только сам источник (как выше).
  • «same-origin» – отправлять полный Referer для запросов в пределах текущего источника, а для запросов на другой источник не отправлять его вообще.
  • «strict-origin» – отправлять только значение источника, не отправлять Referer для HTTPS→HTTP запросов.
  • «strict-origin-when-cross-origin» – для запросов в пределах текущего источника отправлять полный Referer, для запросов на другой источник отправлять только значение источника, в случае HTTPS→HTTP запросов не отправлять ничего.
  • «unsafe-url» – всегда отправлять полный URL-адрес в Referer, даже при запросах HTTPS→HTTP.

Вот таблица со всеми комбинациями:

ЗначениеНа тот же источникНа другой источникHTTPS→HTTP
"no-referrer"
"no-referrer-when-downgrade" или "" (по умолчанию)fullfull
"origin"originoriginorigin
"origin-when-cross-origin"fulloriginorigin
"same-origin"full
"strict-origin"originorigin
"strict-origin-when-cross-origin"fullorigin
"unsafe-url"fullfullfull

Можно выбрать несколько стратегий из доступных вариантов Referrer-Policy, но обычно — это “origin-when-cross-origin”, который включает Referer для всех нормальных запросов, но усекает значение только до домена, если ссылка идёт от одного домена к другому.

Ссылки в пределах вашего собственного сайта включают полный реферер.

Заголовок HTTP Permissions-Policy

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

Инструкция в файле .htaccess

Header always set Permissions-Policy "interest-cohort=(), geolocation=(),midi=(),sync-xhr=(),microphone=(),camera=(),magnetometer=(),gyroscope=(),fullscreen=(self),payment=()"

Заголовок HTTP Permissions-Policy заменяет существующий заголовок Feature-Policy для управления делегированием разрешений браузера.

Параметр interest-cohort=() запрещает браузеру использовать новую технологию Google FLoC для создания «цифрового» отпечатка пользователя.

Вот  в этой статье подробнее

Отключение Google FloC на вашем веб-сайте

Заголовок HTTP Expect-CT

Цель этого заголовка — сообщить браузеру, что он должен выполнить дополнительные «фоновые проверки», чтобы убедиться, что сертификат является подлинным: когда сервер использует заголовок Expect-CT, он в основном запрашивает у клиента проверить, что используемые сертификаты находятся в открытых журналах сертификатов прозрачности (CT).

Инструкция в файле .htaccess

Header always set Expect-CT "max-age=7776000, enforce"

Параметры:

  • включить проверку CT для текущего приложения на период max-age=777600 секунд (9 суток)
  • enforce обеспечить соблюдение этой политики и запретить доступ к приложению в случае нарушения
  • отправить отчет по указанному URL-адресу в случае нарушения (дополнительный параметр) — report-uri=»https://ct.example.com/report
Подпишитесь в VKontakte - нажмите кнопку
Подпишитесь в Telegram - нажмите кнопку
Наша группа ODNOKLASSNIKI

Вы можете сохранить ссылку на эту страницу себе на компьютер в виде htm файла




Пишите на электронную почту (тема и email будут добавлены автоматически в письмо)

В Вашем браузере должна быть настроена обработка ссылок mailto

site_post@bk.ru

или просто скопируйте адрес e-mail



Почитать в разделе

БЕЗОПАСНОСТЬ САЙТА

Что означает безопасность сайта? Зачем кому-то делать что-то плохое с Вашим сайтом? Как обычно - деньги. Для простого сайта на html практически опасностей нет, т.к. на сервере нет кода PHP. Можно только испортить: - положить сайт DDOS атакой (отказ обслуживания) - перехват информации между сайтом и сервером (если сайт не https), хотя что там перехватывать - использование материалов Вашего сайта Для сайтов, которые используют CMS - возможности атак намного больше, там есть сервер PHP и его можно попробовать заставить делать черное дело. 1. Ваш сайт стал использоваться для рекламы т.е. злоумышленники добавляют кучу рекламных страниц на Ваш сайт, пользуются Вашим трафиком -...
(Читать полностью...)

  • Всего статей в разделе: 8
  • Показано статей в списке: 5
  • Сортировка: название по алфавиту

Защищаем форму обратной связи от ботов

Есть форма обратной связи для клиентов Читаем статью Форма обратной связи Проблема в том, что если просто разместить код html формы на странице - рекламные боты замучают.  И fail2ban особо не поможет, т.к. IP-адресов много и они динамически меняются.  И будет что-то типа такого безобразия Да, добавление разных фильтров (у нас же есть PHP под рукой) помогает - но сервер PHP будет заниматься этой чепухой, вместо того, что бы работать с реальными посетителями сайта. Что делать? Создаем форму обратной связи через PHP Будем прятать форму от глупых ботов. Да, умные боты её все равно найдут, но их будет менее 5% от общего числа ботнетов. Спрячем форму в файл form.php, который будет...
(Читать полностью...)

Как включить HTTPS на сайте?

Существуют два основных протокола передачи данных от сервера к пользователю http - трафик между ПК пользователя и хостингом не шифруется (враги могут добавить рекламу для показа на Вашем сайте) https - трафик между ПК пользователя и хостингом шифруется (т.е. например, Ваш провайдер не сможет увидеть, какая информация идет с сайта / на сайт) Более того, в последнее время поисковые машины начинают отдавать предпочтения сайтам с протоколом https (поднимая сайты в выдаче и считая их более безопасными для пользователя). HTTPS (англ. HyperText Transfer Protocol Secure) — расширение протокола HTTP, для поддержки шифрования в целях повышения безопасности. Данные в протоколе HTTPS передаются...
(Читать полностью...)

Как проверить сайт на вирусы?

Для чего это надо? Что быть уверенным, что это Ваш сайт :) Фактически векторы атаки разные и там могут быть не только вирусы:  добавлена переадресация на чужой сайт - воруют Ваш трафик переадресация на сайт с троянами - используют Ваш сайт для создания ботнета Ваш сайт уже является частью ботнета с помощью Вашего сайта (точнее сервиса хостинга) рассылается спам на Вашем сайте появилось 10 000 рекламных страниц :( Читаем статью Хакерский атаки Могут быть несколько базовых вещей при проверке: онлайн проверка кода html на сайте - кроме html-кода сканер ничего не увидит самый простой вариант сканер сразу видит подозрительный код проверка файлов (PHP и  JS)...
(Читать полностью...)

Настраиваем fail2ban под свои задачи

Крайне полезное серверное приложение Linux - настраиваем под себя Про установку и запуск читаем здесь Установка fail2ban на Linux Для самостоятельной настройки нужно: лог с данными настроить фильтр (получение IP из лога) действия (что делать с этими IP) и джайл - связать фильтр и действие :) Например, как это сделать для блокировки ботов-подборщиков логина и пароля в WordPress - читаем статью Блокируем ботов-подборщиков через fail2ban Или создаем свой вариант. ВАЖНО: внесите свой IP (с которого Вы работаете) в исключения для блокировки fail2ban. Иначе при написании своей логики рано или поздно Ваш IP попадет под блокировку. И блокируется весь трафик с / на сервер -...
(Читать полностью...)

Установка fail2ban на Linux

Устанавливаем и запускаем fail2ban на Linux Сначала разберемся с названиями. Всё это - "детальки" сервера на Linux Название Описание netfilter Межсетевой экран (брандмауэр), встроен в ядро Linux с версии 2.4. iptables (IP4) ip6tables (IP6) Название пользовательской утилиты (запускаемой из командной строки), предназначенной для управления системой netfilter. ipset Позволяет использовать большие таблицы IP и MAC адресов, подсетей, номеров портов совместно с iptables (подключение производится через одно правило, в таблице используется хэширование) fail2ban Сканирует файлы журналов (например, / var / log / apache / error_log) и добавляет запись с...
(Читать полностью...)

X

    Please prove you are human by selecting the Heart.