WordPress
держит заметную долю всех сайтов в сети, и именно поэтому он –
излюбленная мишень автоматических атак. Сайты не взламывают поимённо: боты
обходят сеть сплошь и пробуют известные уязвимости на всём, что попадается.
Ниже – меры по убыванию реальной пользы.
Обновляйте ядро, плагины и темы
Это единственный пункт, который важнее всех остальных вместе взятых. Подавляющее большинство взломов WordPress происходит не через ядро, а через устаревший плагин или тему с публично известной уязвимостью. Между выходом исправления и началом массового сканирования проходят часы.
Включите автоматические обновления хотя бы для безопасности ядра, а плагины проверяйте регулярно. Если плагин не обновлялся автором несколько лет – это повод искать замену, а не ждать.
Удалите всё, чем не пользуетесь
Неактивные плагины и темы всё равно лежат на диске, и уязвимость в них эксплуатируется независимо от того, включены они или нет. Отключить недостаточно – нужно удалить. Отдельно стоит убрать темы, которые ставятся вместе с WordPress и никогда не используются.
Надёжный пароль и второй фактор
Атака перебором остаётся самым массовым способом захода в админку. Защищают от неё две вещи: длинный уникальный пароль и двухфакторная аутентификация – её добавляют плагином. Подробнее о выборе и хранении паролей – в отдельной статье.
Полезно также ограничить число попыток входа: после нескольких неудач адрес блокируется на время. Это обрывает перебор на корню.
Запретите редактирование файлов из админки
По умолчанию администратор может править php-файлы темы и плагинов прямо из панели. Для злоумышленника, добравшегося до админки, это готовый способ залить свой код. Отключается одной строкой в wp-config.php:
define('DISALLOW_FILE_EDIT', true);
По той же причине не стоит ставить плагины, позволяющие выполнять произвольный php-код прямо на страницах.
Права доступа и резервные копии
Файлам обычно достаточно прав 644, каталогам – 755; wp-config.php стоит закрыть строже. Права 777 не нужны никогда, что бы ни советовала инструкция к плагину.
Резервные копии не предотвращают взлом, но определяют, во что он обойдётся. Если копия снимается ежедневно и хранится вне того же сервера, потеря ограничится одним днём. Копия, лежащая рядом с сайтом, пропадёт вместе с ним.
Меры, которые дают меньше, чем принято думать
Следующие советы встречаются в каждой второй инструкции. Они не вредны, но это защита через неизвестность: против целенаправленной атаки они не стоят почти ничего, и полагаться на них вместо обновлений нельзя.
- Переименовать пользователя admin. Имя автора записей и так обычно видно в адресах и разметке страницы.
- Скрыть версию WordPress. Версию несложно определить по набору подключаемых файлов и их параметрам.
- Сменить префикс таблиц с wp_ на свой. Помогает лишь против самых примитивных заготовок для SQL-инъекций.
- Обезличить сообщение об ошибке входа, чтобы не было видно, логин неверен или пароль.
Последнее, если всё же хочется, делается фильтром в functions.php темы:
function my_failed_login() {
return 'The login information you submitted is incorrect. Please try again!';
}
add_filter('login_errors', 'my_failed_login');
А удаление мета-тега с версией – так:
function remove_my_wp_version() {
return '';
}
add_filter('the_generator', 'remove_my_wp_version');
И не открывайте регистрацию пользователей, если она вам не нужна: Настройки → Общие, галочка «Любой может зарегистрироваться» должна быть снята.
Сайт – это не только файлы
Можно идеально закрыть WordPress и всё равно потерять сайт, если увести домен. Посетители попадают на сайт через DNS, а записями DNS управляет тот, у кого есть доступ к кабинету регистратора.
Поэтому вместе с сайтом защищают и домен: отдельный почтовый ящик под регистратора, второй фактор, включённый запрет на перенос. Проверить, какие DNS-серверы отданы домену сейчас и когда заканчивается регистрация, можно через whois-поиск; подробный разбор угона – в статье о заражённом компьютере.