Безопасность WordPress: как защитить сайт от взлома
ПечатьСайты на WordPress редко взламывают через сам WordPress. Обычно злоумышленник проникает через устаревший плагин или тему, слабый пароль либо пароль, украденный с заражённого компьютера. Хорошая новость в том, что несколько простых привычек закрывают почти все эти лазейки. Сначала описано то, что стоит сделать каждому владельцу сайта, затем готовые меры защиты в WP Toolkit, а в конце ручные настройки для тех, кто уверенно правит файлы.
Что уже делает сервер и что зависит от Вас
На хостинге TopHost Imunify360 проверяет аккаунты на вредоносные файлы и отсекает атаки, файрвол сервера блокирует IP-адреса, с которых подбирают пароли, а JetBackup 5 делает автоматические копии, которые хранятся по кругу 30 дней. Однако ничто из этого не сделает безопасным уязвимый плагин. По Условиям предоставления услуг внимательный выбор плагинов и тем и их регулярное обновление лежат на клиенте. О серверной защите подробнее: Imunify360 на хостинге TopHost и почему файрвол блокирует IP-адрес.
Основа: сделайте это на каждом сайте
1. Вовремя обновляйте всё
Боты начинают искать известные уязвимости уже через несколько часов после их публикации. Обновляйте WordPress, плагины и темы через cPanel: откройте WP Toolkit (WordPress Management), посмотрите, для чего есть обновления, и установите их. WP Toolkit умеет ставить обновления и автоматически. Если так удобнее или если WP Toolkit нет в Вашем cPanel, то же самое делается в панели WordPress (Dashboard, затем Updates). Перед крупным обновлением сделайте копию; порядок описан в статье как безопасно обновлять WordPress.
2. Удалите лишнее
Отключённый плагин по-прежнему лежит на сервере, и его файлы всё так же можно атаковать. Удалите неиспользуемые плагины и темы, оставив одну стандартную тему про запас.
3. Устанавливайте только из надёжных источников
Пользуйтесь официальным каталогом wordpress.org или сайтом разработчика. «Бесплатные» сборки платных тем и плагинов с посторонних сайтов нередко содержат скрытый код, открывающий доступ чужому человеку.
4. Надёжный вход
- Не используйте имя пользователя «admin». Создайте нового администратора с другим именем, войдите под ним, удалите старую учётную запись и передайте её материалы новой.
- Используйте длинные уникальные пароли (не короче 12-15 символов) и храните их в менеджере паролей. Никогда не повторяйте пароль от почты или другого сайта.
- Включите двухфакторную аутентификацию в WordPress с помощью плагина безопасности, а для личного кабинета и cPanel по статье двухфакторная аутентификация.
- Ограничьте число попыток входа. Это умеют, например, Limit Login Attempts Reloaded, Wordfence Security и All-In-One Security (AIOS). Достаточно одного плагина безопасности: два таких плагина часто мешают друг другу.
5. Храните собственную копию
Автоматические копии служат подстраховкой, а не архивом. Время от времени скачивайте полную копию аккаунта и храните её вне хостинга: как скачать полную резервную копию аккаунта.
Готовая защита в WP Toolkit
- В cPanel откройте WP Toolkit (WordPress Management) и выберите сайт.
- Перейдите в раздел Security этого сайта. WP Toolkit покажет список мер защиты и отметит уже применённые.
- Примените рекомендуемые меры. Типичные примеры: запрет редактирования файлов из панели WordPress, блокировка доступа к служебным файлам, запрет выполнения PHP в папках, предназначенных только для загрузок, и закрытие доступа к xmlrpc.php.
- Затем откройте сайт и админку. Если что-то перестало работать (например, мобильное приложение или сервис, использующий xmlrpc.php), отмените только эту меру на том же экране.
Ещё WP Toolkit умеет сверять файлы ядра WordPress с оригиналом; см. статью как проверить и восстановить ядро WordPress.
Ручные настройки для опытных пользователей
Перед правкой каждого файла сохраните его копию. Строки ниже добавляются через File Manager в cPanel или по FTP.
Отключите встроенный редактор кода
Добавьте эту строку в wp-config.php выше строки «That's all, stop editing». Даже попав в админку, посторонний не сможет изменить оттуда код тем и плагинов:
define( 'DISALLOW_FILE_EDIT', true );
Закройте прямой доступ к wp-config.php и xmlrpc.php
Добавьте в файл .htaccess в корневой папке сайта. Блок для xmlrpc.php не добавляйте, если пользуетесь мобильным приложением WordPress, Jetpack или другим сервисом, который публикует записи через XML-RPC:
<Files "wp-config.php">
Require all denied
</Files>
<Files "xmlrpc.php">
Require all denied
</Files>
Вход в админку только с Вашего IP-адреса
Способ подходит сайтам, где один-два администратора работают с постоянного IP-адреса. Не используйте его, если входят клиенты, авторы или покупатели магазина из разных мест, а также если провайдер меняет Ваш IP. Замените 203.0.113.10 на свой адрес; для каждого дополнительного адреса добавьте ещё одну строку Require ip. В корневом .htaccess:
<Files "wp-login.php">
Require ip 203.0.113.10
</Files>
Чтобы закрыть всю админку, создайте файл .htaccess внутри папки wp-admin. Второй блок оставляет открытым admin-ajax.php: темы и плагины обращаются к нему и для посетителей, без него сайт работает неправильно:
Require ip 203.0.113.10
<Files "admin-ajax.php">
Require all granted
</Files>
Если Вы сами потеряли доступ (например, после смены IP-адреса), исправьте или удалите эти строки через File Manager в cPanel.
Права доступа к файлам
Для папок нужны права 755, для файлов 644. Никогда не ставьте 777: так записывать в файл может любой процесс. Права меняются в File Manager через Permissions.
Префикс таблиц
Префикс, отличный от wp_, немного усложняет автоматические атаки. Задайте его при установке WordPress (это позволяют WP Toolkit и Softaculous). Менять его на работающем сайте хлопотно, а пользы мало, поэтому делать это только ради защиты мы не советуем.
Если сайт уже взломан
- Первые шаги в правильном порядке: сайт взломали.
- Пришло уведомление о заражённых файлах: что сделать в течение 24 часов.
- В Вашем плагине или теме опубликована уязвимость: что нужно сделать.
- Чтобы вернуть чистую копию до взлома: восстановление через JetBackup 5.
Нужна помощь? Откройте тикет в поддержку, укажите адрес сайта и что Вы заметили.