Делюсь используемыми мной методами, которые считаю актуальными в работе любого вебмастера, переживающего за безопасность клиентских проектов.
Общие рекомендации
- Подключение к сайту 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 на фронте | Код | ✅ |
Через дочернюю тему при наличии | ✅ |
Если было полезно, вы можете отблагодарить меня подпиской на мой канал https://t.me/ennhomenko, в котором я делюсь опытом вебмастера, а также отвечаю новыми публикациями на вопросы в комментариях