WordPress HTTPS

WordPress HTTPS — усиливаем защиту с помощью Security Headers и включаем для сайта HSTS, который сразу скажет браузеру использовать HTTPS.

В прошлый раз в статье SSL сертификат для сайта говорил как перевести сайт с HTTP на HTTPS. Краткая выжимка (содержание первой серии):

  • Сертификат не покупаем, пользуемся бесплатным Let's Encrypt;
  • Для автоматического обновления сертификата, который действует всего 3 месяца, используем возможности хостера;

Скорее всего тут есть разные варианты, мой хостер предлагает cPanel и тут такое есть:

Wordpress HTTPS

  • Поскольку получаются 2 версии сайта: HTTP и HTTPS, то нужно включить принудительный редирект 301 на HTTPS. Использовал для этого плагин Really Simple SSL.

Security Headers

Читатель открывает сайт как HTTP и мы его перенаправляем. А можно сразу как-то передать информацию, что сайт использует только HTTPS, ещё на этапе открытия? Да, поможет заголовок безопасности Strict-Transport-Security.

Посмотреть установлен ли этот заголовок и другие, и какие именно, можно здесь. А установить с помощью плагина GD Security Headers. Со страницы плагина:

The plugin can add all the generated headers into HTACCESS file (for Apache web servers), and they will be applied to all files, not just WordPress generated content. If your website is not using Apache (or .HTACCESS), all rules are generated with each page request and will work with any server type.

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

# Security Headers
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin"

Это на мой взгляд оптимальный набор заголовков. Permissions-Policy не особо нужен:

The Permissions-Policy HTTP header replaces the existing Feature-Policy header for controlling delegation of permissions and powerful features

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

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

После чего получил циклическую перезагрузку и неработоспособный сайт. Виноват оказался плагин Really Simple SSL. Удалил его и какое-то время сайт перенаправлял только за счёт Strict-Transport-Security. И это работает. Совместимость браузеров:

Wordpress HTTPS

Единичные заходы по HTTP видел в Я.Метрике с Android Browser (кто-то ещё им пользуется..?). Это и есть HSTS, теперь подробнее.

Технология HSTS

Было уже немало камней: что ты ... мне насоветовал? Поэтому, в частности, убрал с сайта все материалы по работе с жёсткими дисками. Прежде чем делать как тут сказано, включи мозги, пожалуйста. Сайт не сможет открываться по HTTP (совсем, никак, без исключений), не только в Хроме, но и в большинстве других браузеров.

This is a list of sites that are hardcoded into Chrome as being HTTPS only.

Most major browsers (Chrome, Firefox, Opera, Safari, IE 11 and Edge) also have HSTS preload lists based on the Chrome list.

HSTS (HTTP Strict Transport Security) использует одноимённый заголовок для работы. В общем-то сделанного ранее уже вполне достаточно. Но тут есть особый вариант использования, с параметром preload.

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

Идём сюда, и проверяем свой сайт. Должен быть включен редирект 301 на HTTPS. Подобрал рабочий вариант без зацикливания здесь (внизу страницы).

# Редирект http в https
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

Снова проверяю, ошибка Warning: Unnecessary HSTS header over HTTP.

Wordpress HTTPS

Исправляем заголовок на (только для HTTPS):

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

Ошибка уходит:

Wordpress HTTPS

Добавление сайта в preload list займёт какое-то время, после чего он будет доступен только по HTTPS.

Ещё полезности

Поскольку статьи про сайт пишу очень редко, то выложу тут несколько простых способов причесать свой сайт с помощью cPanel и не только.

  • Включить сжатие GZIP;

Выбрать Сжать все содержимое, проверить тут.

  • Включить защиту от хотлинкинга;

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

  • Проверять использование ресурсов;

Периодически смотреть этот раздел и если сайт постоянно зашкаливает по CPU и/или PHP-запросам, значит плагины. Что-то неправильно настроено или конфликтует.

  • Версия PHP;

Для оптимальной скорости работы включить 7.4 версию PHP и все расширения, которые рекомендует WordPress на вкладке здоровья сайта.

  • Проверить сайт на скорость загрузки;

Можно тут, лучший бесплатный плагин кеширования WP Super Cache, настройка здесь.

  • Убираем fbclid

Умные ребята с Фейсбука решили при переходе на внешние ссылки навешивать id, из-за чего получаются дубли страниц. Решаем через .htaccess:

# Убрать fbclid
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} ^fbclid
RewriteRule ^(.*)$ /$1? [R=301,L]
</IfModule

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *