Логотип WordPressWordPress держит заметную долю всех сайтов в сети, и именно поэтому он – излюбленная мишень автоматических атак. Сайты не взламывают поимённо: боты обходят сеть сплошь и пробуют известные уязвимости на всём, что попадается. Ниже – меры по убыванию реальной пользы.

Обновляйте ядро, плагины и темы

Это единственный пункт, который важнее всех остальных вместе взятых. Подавляющее большинство взломов 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-поиск; подробный разбор угона – в статье о заражённом компьютере.