Search
Generic filters

Уровни безопасности сайта, включая проекты на WordPress

Уровни безопасности сайта, включая проекты на WordPress Разработка сайтов

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

Общие рекомендации

  • Подключение к сайту SSL-сертификата с обязательным редиректом на защищённое соединение в системном файле .htaccess:⠀
RewriteCond %{HTTP:X-Forwarded-Protocol} !=https

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

  • Никогда не сохранять пароль к хостингу в браузере. Я работаю на Jino и всегда использую специальное приложение от хостинга для входа по QR-коду.
  • Использование по возможности защищенного SFTP-соединения с хостингом.
  • Включение FTP-доступа к аккаунту на хостинге только при необходимости.
  • При доступе к хостингу по FTP сохранение паролей только на время сессии.
  • Внедрение в каждый клиентский проект дополнительного системного файла .ftpaccess, ограничивающего доступ по FTP до одного IP-адреса. При каждом новом соединении я заново узнаю свой IP, который прописываю в файле на хостинге, и только затем могу соединиться с проектом для экспорта/импорта. Таким образом, даже если вдруг Вы забыли отключить доступ на уровне хостинга, враг не пройдет на уровне проектов. Пример директивы:⠀
Allow from 35.158.99.112
Deny from all
  • Отдельного внимания заслуживает анализ безопасности используемой в проекте CMS. К примеру, весьма наслышана о проценте взламывания популярной WordPress. Думаю, дыры в безопасности имеет любая CMS, важен тот факт, насколько плотно ими озабочены разработчики. Если безопасность проекта в приоритете, стоит рассмотреть платные решения, например, Bitrix.
  • Обязательное использование сложных логинов и паролей с генерацией с помощью специальных онлайн-сервисов, я, например, использую, вот такой генератор. При этом логин формирую порядка 30 символов, пароль – 50-70 символов, то бишь сложный. Для WordPress также актуально запретить вход по электронной почте, только если это не специально созданный для подобных целей корявый email. Для решения использовала возможности плагина Code Snippets. Ну и само собой, ни о каких логинах и паролях типа “admin”, “12345” речи быть не может.
  • Отдельной строкой можно выделить безопасность баз данных, к примеру, использование отличных от стандартных для той или иной CMS префиксов таблиц.​
  • Безопасность на уровне сервера обеспечивается включением настройки open_basedir в параметрах конфигурации, которая ограничивает выполнение вредоносных скриптов папкой сайта (чаще всего предустановлена на хостинге по умолчанию). В ином случае могут быть заражены все файлы на хостинге.
  • Наличие антивируса на хостинге, регулярная проверка файлов. Бывает, что антивирус есть, но запускается только вручную, или за дополнительную плату.
  • Регулярный BackUp сайтов и баз данных. Реально обеспечить посредством выбора правильного хостера. К примеру, я более 10-ти лет работаю с Jino, где бекапы файлов и баз данных создаются автоматически, и при нарушении работы сайт вполне реально быстро восстановить. Собственно, за столько лет работы ни разу не возникало нареканий.
  • Подключение сайта к https://www.cloudflare.com для защиты хакерских и DDoS-атак (можно потерять часть трафика).
  • Для важных проектов с определенной периодичность проверять логи сервера для выявления подозрительных визитов.

Безопасность сайта на WordPress

Последующие инструкции касаются непосредственно сайтов на CMS WordPress и собраны мной после брутфорс-атаки на сайта клиента. Часть информации найдена мной на просторах интернета, часть написана чатом GPT после анализа логов сервера атакуемого сайта. Важно: ситуации бывают разные, как и их решение. Поэтому для максимально четких рекомендация со стороны искусственного интеллекта загрузите логи и задайте вопросы по безопасности проекта. Я использовала файл логов за последний месяц, сохранив его в формате .txt, при этом его вес составил чуть более 10Мб, то есть очень и очень приличный, тем не менее ИИ его съел и ни чуть не подавился. Подходит даже бесплатная версия.

  • Что касается WordPress, то в обязательном порядке необходимо скрывать стандартную страницу авторизации с помощью специальных плагинов, например: WPS Hide Login, или среди прочих функций данную возможность имеет плагин Clearfy Pro от WP Shop.
  • Отключение xmlrpc.php

Этот файл почти никому сейчас реально не нужен (если только ты не управляешь сайтом через мобильное приложение или не используешь внешние XML-RPC сервисы). В .htaccess добавить:

<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>

Или через functions.php темы:

add_filter('xmlrpc_enabled', '__return_false');
  • Ограничиваем доступ к /wp-login.php и /wp-admin/

Можно оставить только свой IP (или список доверенных IP) или настроить базовую авторизацию (basic auth) перед входом. Пример в .htaccess:

<Files wp-login.php>
Order Deny,Allow
Deny from all
Allow from YOUR_IP_ADDRESS
</Files>
  • Установка Firewall на уровне WordPress

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

  • Отключение REST API для неавторизованных

Прописываем в functions.php основной или дочерней темы WordPress

add_filter('rest_authentication_errors', function ($result) {
if (!is_user_logged_in()) {
return new WP_Error('rest_forbidden', 'REST API restricted.', array('status' => 403));
}
return $result;
});
  • Ограничение попыток входа

Еще один плагин для ограничения попыток входа по IP и блокировке брутфорса – Limit Login Attempts Reloaded

  • Отключить редактор тем и плагинов в админке

В случае, если кто-то все же получил доступ к админке, можно ограничить возможности. В файле wp-config.php прописываем:

define('DISALLOW_FILE_EDIT', true);
  • Автоматическое отключение API Heartbeat на фронте

Позволяет экономить ресурсы и убирает лишние точки атаки. В functions.php основной или дочерней темы прописываем:

add_action('init', function() {
if ( ! is_admin() ) {
wp_deregister_script('heartbeat');
}
});

Бесплатные способы для сайта WordPress

Способ Тип Бесплатно
Отключить xmlrpc.php Код/htaccess
Ограничить попытки входа Плагин
Скрыть страницу авторизации Плагин
Безопасность Wordfence Плагин
Отключить REST API для гостей Код
Отключить редактор тем и плагинов Код
Клаудфлер Услуга
Переименовать префикс таблиц (если можно) БД
Двухфакторная аутентификация Плагин
Отключить API Heartbeat на фронте Код
Через дочернюю тему при наличии

 

 

Оцените статью
Блог вебмастера Анны Хоменко