Ваш файл htaccess не содержит всех рекомендуемых заголовков безопасности

Обновлено: 06.07.2024

Upgrade-Insecure-Requests

Строка заголовка Upgrade-Insecure-Requests:

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

X-XSS-Protection

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

Строка заголовка X-XSS-Protection:

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

X-Content-Type-Options

Заголовок безопасности X-Content-Type-Options позволяет защитить сайт от атак с подменой типов MIME. Он указывает браузеру фильтровать передаваемые данные и передавать только те, которые по содержанию соответствуют расширению. Например, если расширение файла «.docx», браузер должен получить файл Word, а не какой-нибудь исполняемый файл, у которого расширение «.exe», «.bat» заменено на «.docx».

Строка заголовка X-Content-Type-Options:

Expect-CT (Certificate Transparency)

Заголовок безопасности Expect-CT (Certificate Transparency) сообщает браузеру, что он должен выполнить дополнительные проверки сертификата на подлинность по открытым журналам прозрачности сертификатов.

Строка заголовка Expect-CT (Certificate Transparency):

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

No Referrer When Downgrade

Строка заголовка No Referrer When Downgrade:

Header always set Referrer - Policy : "no-referrer-when-downgrade"

X-Frame-Options

Заголовок безопасности X-Frame-Options предотвращает загрузку сайта в iframe. Использование этого заголовка заблокирует отображение вашего сайта WordPress в iframe на других сайтах.

Строка заголовка X-Frame-Options:

Если вы хотите, чтобы ваш сайт отображался в iframe на других сайтах, удалите эту строку из списка заголовков безопасности.

А если на вашем хостинге установлен X-Frame-Options по умолчанию, но вы хотите чтобы ваш сайт отображался в iframe на других сайтах, добавьте в список заголовков безопасности следующую строку:

Добавляем заголовки HTTP для безопасности сайтов на WordPress

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

Введение

X-XSS PROTECTION

Атака XSS, межсайтовый скриптинг, — известная форма киберугрозы, с которой сталкиваются практически все значимые сайты. Именно этот заголовок помогает обезопасить ресурс от XSS. По умолчанию такая функция встроена и активирована в современных браузерах. Следовательно, если вы укажете этот заголовок на своем сайте, обозреватели будут учитывать ее.

В этом случае, если была зафиксирована попытка межсайтового скриптинга, затронутая страница вашего ресурса просто не загрузится.

X-CONTENT-TYPE-OPTIONS

Следующий тип заголовка безопасности — X-Content-Type-Options. Его прелесть заключается в значении nosniff, которое запрещает сниффинг контента. Используя этот заголовок, можно защитить свой сайт от атак с подменой типов MIME.

X-FRAME OPTIONS

Заголовок x-frame-options защищает веб-ресурсы от кликджекинга, запрещая iframe заполнять ваш сайт. Этот заголовок поддерживают следующие обозреватели: IE 8+, Chrome 4.1+, Firefox 3.6.9+, Opera 10.5+ и Safari 4+.

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

REFERRER-POLICY

Заголовок «Referrer» выступает на первый план именно в тот момент, когда пользователь попадает на веб-ресурс. Он помогает серверу понять, откуда пришел новый посетитель. Этот заголовок используется для аналитики.

Как вы уже наверняка успели понять, это представляет определенную проблему для конфиденциальности. Чтобы запретить подобное поведение, владельцу сайта на WordPress надо всего лишь добавить Referrer-Policy.

FEATURE-POLICY

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

Для каждой отдельной функции вам придется указать, запрещена она или разрешена. Вот список таких функций:

  • geolocation
  • midi
  • notifications
  • push
  • sync-xhr
  • microphone
  • camera
  • magnetometer
  • gyroscope
  • speaker
  • vibrate
  • fullscreen
  • payment

Например, если вы хотите запретить geolocation и camera на вашем сайте, вы прописываете следующий заголовок:

Теперь эти функции будут отключены для всех браузеров, посещающих ваш ресурс.

Внимание! Если вы планируете следовать этим инструкциям, вам надо убедиться, что на вашем WordPress-сайте установлен SSL-сертификат. В противном случае ваш сайт будет недоступен. Также не забудьте создать резервную копию всех файлов, которые будете модифицировать.

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

Сохраните измененный файл.


Выводы

В нашей инструкции мы сознательно не стали прописывать Feature Policy и Content Security Policy, они немного более сложны в использовании и могут навредить вашему сайту. Но и этого будет достаточно, чтобы повысить безопасность вашего сайта. Теперь вы сможете попробовать все вышеописанные шаги сами.

Подписывайтесь на канал "Anti-Malware" в Telegram, чтобы первыми узнавать о новостях и наших эксклюзивных материалах по информационной безопасности.

Файл .htaccess (Hypertext Access) это файл настройки Apache-сервера. В Сети довольно много статей по настройке .htaccess. Этому даже посвящены целые сайты. Однако, когда я приступал к изучению мануалов по настройке файла .htaccess, я мало что понял, уж очень запутано пишут. К тому же вопросам безопасности сайта уделяется мало внимания.

hypertext access

Создаем .htaccess

root

.htaccess — это обычный текстовый файл, правда с необычным расширением. На хостингах, с которыми я работал, есть возможность создавать и управлять файлом .htaccess прямо из панели управления сайтом. Если же на вашем хостинге такой поддержки нет, вам следует создать текстовый файл с расширением .htaccess у себя на компьютере (например в блокноте) и через FTP-соединение загрузить его в корневую директорию. Действие файла-конфигуратора распространяется на все вложенные директории. Чтобы изменить настройки для определенной директории (например, admin) следует разместить там другой файл .htaccess с новыми настройками.

Первое, что необходимо сделать, это включить перенаправления на основной домен сайта, то есть определиться с доступом к сайту с www или без, а также убрать все index.php. Это нужно для правильной индексации сайта, ведь без этого ваш сайт будет доступен по четырем адресам:

redirect301

Прячем расширения файлов

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

Но это не всегда удобно. Ведь если у мы передаем GET-параметры в URL, запрос будет выглядеть так:

Для этого необходимо изменить всю строку запроса, чтобы не выделять параметры так очевидно. Это называется Человеко-Понятный URL (ЧПУ).

Прячем GET-параметры в ЧПУ

В любой CMS вы можете это сделать в панели администрирования, но если вы не пользуетесь системами управления контентом и делаете все своими руками, как я, писать ЧПУ придется через .htaccess.

Допустим у нас есть catalog.php. В него мы передаем title и year. В нашем случае ссылка выглядит так:

А нам надо преобразовать URL к следующему виду:

Теперь, введите в адресную строку браузера catalog/2011/example.cgi и вы попадеете на catalog.php?year=2011&title=example (чтобы увидеть редирект поставьте [R]). После таких преобразований все ваши ссылки на сайте должны быть приведены к такому виду. Надеюсь пример понятен, а если нет, то пишите комментарии, разберемся.

Управляем выводом ошибок

Отображение ошибок безусловно полезная вещь при отладке приложения. Однако после отладки директивы error_reporting и display_errors следует отключать, потому что атакующий может узнать из них важную информацию о работе скрипта.

Запрещаем доступ к определенным файлам

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

Запрет доступа к директории

Для запрета доступа к целой директории необходимо создать в ней файл .htaccess со следующим содержанием:

Иногда нужно запретить доступ к директории всем кроме определенных ip-адресов. Это можно сделать для защиты административной части сайта.

Аутентификация пользователя

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

Файл .htpasswd содержит имена пользователей и хеш пароля. Он создается с помощью утилиты htpasswd.exe и располагается в корневой директории. Теперь, при доступе к защищенной директории пользователь увидит:

basic authentication


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

Защита файлов от скачивания (hotlink)

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

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

В этой статье вы узнаете, что можно добавить в файл .htaccess для увеличения безопасности сайта.

Что может делать .htaccess

FileZilla - Показывать скрытые файлы

Файл используется для настройки сервера, типичное применение файла:

  • Включает и отключает редиректы на другие страницы
  • Добавляет пароль на папки
  • Блокирует пользователей по IP
  • Отключает показ содержимого папок
  • Создает и использует собственные страницы для ошибок

Если вы уже знаете, для чего нужен этот файл, переходите к списку.

Сделайте бэкап

.htaccess довольно чувствительный файл, поэтому одна ошибка в синтаксисе может положить весь сайт. Скопируйте файл на компьютер, если появится ошибка, вы сможете вернуться к первоначальному варианту.

Как создать .htaccess

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

Если ваш сервер или компьютер не позволяет создать файл с таким именем, создайте файл htaccess.txt, перенесите его на сервер и на сервере переименуйте его в .htaccess.

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

Для одиночной установки:

Для мультисайт установки, версия Вордпресс 3.5 или выше, если сайты находятся в подпапках:

Для мультисайт установки, версия Вордпресс 3.5 или выше, если сайты находятся на субдоменах:

Куда добавлять изменения

Добавляйте свои комментарии к вашим правилам.

Когда вы добавляете свои правила, добавляйте их выше или ниже стандартных правил Вордпресс.

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

Добавляйте свои правила выше или ниже стандартных правил Вордпресс по-одному, пишите к ним комментарии, сохраняйте и проверяйте изменения на сайте.

Как редактировать файл .htaccess

Вы можете редактировать .htaccess из вашей хостинг-панели, или через ftp-клиент.

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

1. Защита важных файлов

Запретите доступ к файлам wp-config.php, htaccess, php.ini и логам ошибок. Добавьте это правило, чтобы запретить доступ к этим файлам:

У вас может не быть файла php.ini. Вместо него может быть файл php5.ini или php7.ini. Если у вас есть файл php5 или php7, замените php.ini на php5.ini или php7.ini . Если файла php.ini нет вообще, уберите php.ini| из правила.

Если вы хотите запретить доступ только к файлу wp-config.php, добавьте это правило:

Если вы хотите запретить доступ ко всем файлам .htaccess на сайте, добавьте этот код:

2. Закройте доступ к wp-login.php и wp-admin

Если вы используете статический IP, вы можете запретить доступ к странице входа или панели администратора:

Первые две строчки перенаправляют посетителя с неавторизованного IP на страницу с ошибкой 404. Это правило не будет вызывать цикличные редиректы, ваш сайт не будет выглядеть как зависший.

Замените /путь-к-вашему-сайту/ в двух первых строчках на свой адрес.
Замените IP Адрес 1 , IP Адрес 2 и IP Адрес 3 на те IP адреса, с которых вы хотите иметь доступ к страницам wp-login.php и wp-admin.

Если вам нужен только один IP адрес, удалите строки 9 и 10, если вам нужно больше адресов, добавьте нужное количество строк.

Если вы или другие пользователи имеют динамические IP (или Мультисайт), используйте следующее правило:

Хакеры используют ботов, чтобы пытаться попасть в админку Вордпресс. Это правило определяет, что только те пользователи, которые вручную набрали wp-login.php или wp-admin в браузере, получат доступ к этим страницам.

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

Замените IP Адрес 1 и IP Адрес 2 на свои IP.

3. Запретите доступ к директориям сайта

Если эти папки будут доступны для просмотра, злоумышленник может заразить какие-то файлы на вашем сервере. Чтобы запретить доступ к папкам, добавьте это правило в .htaccess:

4. Доступ только к разрешенным типам файлов

В папке wp-content находятся темы, плагины и медиа контент. Кроме доступа к директориям сайта, можно разрешить доступ только к некоторым типам файлов, например, css, js, jpg, pdf, doc и так далее. Для этого создайте в папке wp-content новый файл .htaccess и добавьте это правило:

Не вставляйте этот код в файл .htaccess в корневой папке. Если вам нужно добавить в исключения другие типы файлов, добавьте их после |odf .

5. Запретите доступ с определенных IP

Вы можете полностью запретить доступ к сайту с подозрительных или вредоносных ip:

Замените IP Адрес 1 , IP Адрес 2 и IP Адрес 3 на ip-адреса, которым вы хотите запретить доступ к сайту.

6. Запретите доступ к PHP файлам

Добавьте этот код, чтобы заблокировать доступ неавторизованных пользователей к php файлам темы и плагинов:

7. Запретите исполнение PHP файлов

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

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

Обычно хакеры загружают бэкдоры в папку /wp-content/uploads/ , поэтому заблокируйте исполнение всех PHP файлов в этой папке:

8. Защитите сайт от внедрения вредоносных скриптов

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

9. Запретите доступ к папке wp-includes

В папке wp-includes хранятся файлы ядра Вордпресс, поэтому доступ к этой папке лучше полностью закрыть:

Добавьте это правило в .htaccess:

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

11. Отключите XML-RPC

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

Чтобы отключить XML-RPC, добавьте это правило:

12. Отключите нумерацию пользователей

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

Если хакер узнает ID пользователя, который также является логином пользователя, то теперь злоумышленнику остается только узнать пароль пользователя.

Даже если пользователи используют сложные пароли, злоумышленнику лучше не знать ID пользователей:

13. Используйте SSL

Это правило требует использование SSL сертификата, выданного домену, который указан в 3-ей строчке.

14. Отключите хотлинк картинок

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

Чтобы отключить хотлинк картинок, используйте это код:

Заключение

Здесь находится он-лайн генератор правил для файла .htaccess.

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

Надеюсь, статья была полезна. Поделитесь в комментариях, что вы добавляете в .htaccess.

Apache
Content Security Policy в Apache

На веб-севере Apache должен быть включен mod_headers - специальный модуль для управления HTTP-заголовками в конфигурационных файлах. Само значение заголовка указывается в " " (двойных кавычках) .

<IfModule mod_headers.c>
Header set Content-Security-Policy "default-src 'self' 'unsafe-inline' *.site.com; report-uri https://site.com/report.php"
Header set X-XSS-Protection "1; mode=block"
Header set X-Frame-Options "DENY"
</IfModule>

После установки блока заголовков на сервере:

1. Если заголовки были установлены в конфигурационном файле сайта, надо проверить его корректность командой apachectl -configtest и перезагрузить веб-сервер. Если заголовки были установлены в файле .htaccess, то этот пункт можно пропустить.

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

3. функция header() в PHP-коде сайта

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

В веб-сервере Апач, кроме «Header set», можно указать заголовок посредством «Header always set». Ключевое слово «always», добавленное в «Header set» кардинально меняет поведение. Заголовок, изданный с ключом «always» всегда добавляет своё значение к заголовкам с тем же именем, изданным в других местах.

Таким образом, если в конфиге сайта издаётся Header always set X-Frame-Options: "SAMEORIGIN" , а в PHP-коде сайта издаётся header("X-Frame-Options: DENY"); , то результирующий заголовок будет

X-Frame-Options: SAMEORIGIN, DENY .

Ошибка веб-сервера 502

Любые ошибки синтаксиса или формата файла .htaccess приводят в возникновению ошибки 502 на сервере . При этом сайт перестаёт работать, поэтому лучше хранить рабочую копию файла .htaccess , чтобы можно было быстро сделать откат.

Nginx
Content Security Policy в Nginx

add_header Content-Security-Policy "default-src 'self' 'unsafe-inline'; report-uri https://site.com/get.php";
add_header Header set X-XSS-Protection "1; mode=block";
add_header X-Frame-Options "DENY";

Следует избегать многострочных заголовков ответа:

add_header Content-Security-Policy "
default-src: 'none';
font-src data: https://yastatic.net;";

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

После установки заголовков надо проверить корректность конфигурации командой nginx -t и перезагрузить веб-сервер.

Content Security Policy в htaccess

Указать заголовок Content Security Policy можно в файле htaccess с помощью Header set, как и в конфиге Apache. При этом файл htaccess доступен для записи скриптам сайта, поэтому многие плагины, например для Wordpress, позволяют удобно администрировать CSP в htaccess .

Генератор Content Security Policy может создавать её в формате, пригодном для вставки непосредственно в htaccess .

Синтаксис файла .htaccess

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

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

Использование «обратного слэша» - очень удобная фича, позволяющая делать читабельный код политики CSP, с которым будет удобно работать:

В генераторе типовых политик Content Security Policy предусмотрен специальный checkbox для вывода политики в формате файла htaccess.

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

Content Security Policy и администрирование сайта

Для многих сайтов с CMS, в частности, для Wordpress, есть смысл отключать заголовки Content Security Policy для режима администрирования сайта, поскольку Content Security Policy блокирует все встроенные скрипты и обращения к репозиториям WP типа:

Также CSP может блокировать схему wyciwyg:, использующуюся для доступа к локально кэшированным страницам, которые были созданы или изменены скриптом на стороне клиента.

Поскольку, при отдаче заголовков CSP через файл .htaccess, его правила наследуются для всех вложенных директорий, надо сделать отдельный .htaccess для папки /wp-admin/ и отменить в нём издание заголовков CSP.

Пример файла .htaccess , который нужно положить в папку /wp-admin/ для Вордпресса:

Options -Indexes FollowSymlinks
<IfModule mod_headers.c>
Header unset Content-Security-Policy
</IfModule>

Если у вас уже есть файл .htaccess в этой папке - просто добавьте в него:

<IfModule mod_headers.c>
Header unset Content-Security-Policy
</IfModule>

чтобы отменить издание CSP-заголовка для этой директории. То же самое надо проделать и для сайтов на CMS Joomla, Drupal, Moodle, Wordpress и тп.

Читайте также: