Категорически привествую, решил написать 100500 материал, который поможет Вам защитить сайт на WordPress от взлома, но при этом я решил расположить пункты от простого к сложному (так как уровень пользователей разный), но даже несколько первых несложных пункта снизять вероятность взлома на 90% что уже более чем неплохо, правда ?
По опыту скажу, что в подавляющем числе случаев доступ к WordPress получают либо через брут логина-пароля, либо через чтение файла wp-config.php и последующим созданием пользователя в базе данных, поэтому указанные ниже шаги направлены на противодействие именно этим методам, против заливки шелла это не особо усложнит задачу взломщика, но и оставить такую дыру еще нужно суметь, хотя бывает всякое. Поехали!
Не ставить простые пароли и пароли содержащие логин
Вроде бы прописная истина и все это знают, но подавляющая доля взломов сделана через пароли
- простого типа, вида «admin», «admin123», текущий год и прочее
- содержащие логин, например я публикую записи под ником «reset», так вот пароли в духе «reset123», «reset2020» и т.д. тоже ставить не нужно.
так что если твой пароль именного такого вида, сменив его прямо сейчас, ты сразу значительно повысишь защиту WordPress от взлома — я серьезно.
Удаляем ненужные плагины и темы, включая системные
Даже если плагин или тема неактивна, она продолжает быть потенциальной дырой, и уже не раз были случаи, когда взламывали сайта из за отключенного сто лет назад плагина, который не обновлялся, но почему то удалить его не поднималась рука. Поэтому смело удаляем, если что скачаете опять.
Отключаем xmlrpc.php
XML-RPC это такой древний протокол через который можно было управлять WordPress , в 99.999% случаев это тебе не пригодится, так как уже довольно давно существует REST API, а этот файл просто памятник былой эпохи и фиг бы с ним, но через него можно с дикой скоростью брутфорсить логин-пароль, поэтому отключаем.
Отключить собственно можно через плагин, но я плагины не очень люблю, так как это дополнительная нагрузка на не особо быстрый движок, поэтому можно просто заблокировать через htaccess таким кодом
<Files xmlrpc.php> order deny,allow deny from all </Files>
Если вдруг понадобится доступ, то можно дописать перед </Files> строку «allow from 2.2.2.2» что откроет доступ с IP адреса 2.2.2.2.
Либо этот файл можно просто удалить, однако нету гарантий что он не появится в каком то обновлении
Блокировка или перенос точки входа в админку wp-login.php
Очень часто доступ в WordPress получают путем создания дополнительного пользователя в базе данных или перепривязки элекронной почты админа (подробности этого процесса будут чуть ниже) . Эта история конечно уже неприятная, но если перенести точку входу в админку, то зайти на сайт будет практически невозможно, да и брутить админку тоже не получится (а xmlrpc мы уже заблокировали)
Если вы заходите в ВП с определеного пула IP адресов, то просто прикрыть точку входа в админку в .htaccess аналогично xmlrpc.php, оставив нужные например
<Files wp-login.php> order deny,allow deny from all allow from 2.2.2.2 </Files>
Если же адресов у вас много, то все равно заносим такую запись в htaccess (потому что wp-login.php системный файл и может обновится) и переносим саму точку входа таким образом.
- Скачиваем файл wp-login.php
- Переименовываем, чтоб удобно было запомнить, например wp-new-login.php
- Открываем файл и везде заменяем старое вхождение на новое имя, то есть «wp-login.php» на «wp-new-login.php»
- Закачиваем назад
Еще пишут что нужно добавить в файл functions.php хук
/* * Change WP Login file URL using "login_url" filter hook * https://developer.wordpress.org/reference/hooks/login_url/ */ add_filter( 'login_url', 'custom_login_url', PHP_INT_MAX ); function custom_login_url( $login_url ) { $login_url = site_url( 'wp-new-login.php', 'login' ); return $login_url; }
но у меня заработало и без этого.
Если что плагин для этого тоже существует :), но это не ко мне.