Как всем известно, большинство сайтов подвергаются взлому. Защита WordPress от взлома — это актуальный вопрос так, как на сегодняшний день в интернете работают на WordPress около 29% сайтов, поэтому давайте немного поговорим о защите данной CMS от от попыток взломать, внедрения вирусов для рассылки спама и о базовой защите сайта на WordPress от DDOS атак.
1. Установка надёжного пароля
Получить логин админа не трудно, так как по умолчанию первому пользователю предоставляются права администратора — злоумышленникам и требуется этот логин, а большинство владельцев сайтов используют стандартный логин admin. Но если же логин у Вас другой — достаточно к домену дописать ?author=1 и в адресной строке URL преобразуется в подобное: https://yoursite.com/author/login/ где login — логин первого пользователя. После того как злоумышленник узнал логин, следующим его действием будет подбор пароля.
Чтобы это предотвратить, первым делом нужно создать нового пользователя со сложным паролем и предоставить ему все привилегии. Далее убрать роль администратора первого пользователя. То есть, если злоумышленник получит доступ к аккаунту — он ничего не сможет сделать.
Используйте плагины для защиты при авторизации. Чтобы ограничить количество попыток доступа используйте плагин Login LockDown или Limit Login Attempts. Этим самым Вы сможете блокировать IP адрес после неудачных попыток входа.
Используйте каптчу при авторизации с помощью плагина Google Captcha.
2. DOS атака с помощью файла load-scripts.php
Уязвимость которая существует в WordPress 4.9.4 и ранних версиях.
Существует файл wp-admin/load-scripts.php который, по задумке разработчиков, предназначен для быстрой загрузки сайта объединив несколько файлов JavaScript в один запрос. К сожалению файл доступен даже анонимному пользователю который может перечислить все файлы JavaScript подобным запросом https://your-site.com/wp-admin/load-scripts.php?c=1&load=editor,common,user-profile,media-widgets,media-gallery… тем самым создав нагрузку на сервер что может выдать статус ошибки 502/503/504.
Уязвимость обнаружил израильский исследователь в области безопасности Barak Tawily, и чтобы защититься от этой атаки он предложил пользователям использовать свою сборку WordPress forked version, в которой содержится фикс данной неуязвимости. Также, он предложил bash-сценарий, который исправит проблему в установленном WordPress .
3. Отключение регистрации или минимальные привилегии пользователя
Известно что при регистрации аккаунта злоумышленник может позлорадствовать привилегиями и изменить записи опубликованные даже от админа. В настройках «Общее» установите минимальные привилегии для новых пользователей если регистрация действительно необходима. В другом случае отключите регистрации вообще дабы обеспечить защиту сайта.
4. Обновляйте плагин, темы и WordPress
Обычно причиной взлома являются использование старых версий скриптов. С каждым обновлением WordPress предупреждает Вас иконкой вверху о том, что есть доступное обновление. Не поленитесь и обновите скрипты, так как с каждым обновлением разработчики исправляют ошибки и уязвимости.
К примеру, некоторые темы, как QAEngine, были уязвимы на аутентификацию. Одним запросом можно было создать пользователя с правами администратора:
http://your-site.com/wp-admin/admin-ajax.php?action=ae-sync-user&method=create&user_login=USER&user_pass=PASSWORD&role=administrator
тем самым можно было залогиниться в админку и иметь преимущество над всем сайтом.
5. Пропишите в .htaccess следующие правила:
Ограничить доступ к файлу
order allow, deny deny from all
Запретим отслеживание HTTP заголовков:
RewriteEngine On RewriteCond %{REQUEST_METHOD} ^TRACE RewriteRule .* — [F]
Запретим использование SQL-инъекций:
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC, OR] RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0 — 9A-Z]{0, 2}) [OR] RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0 — 9A-Z] {0,2}) RewriteRule ^(.*)$ index.php [F.L]
Запретим просмотр директорий на сервере
Options –Indexes
Не позволяем использовать свои изображения другим сайтам
RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://(.+\.)?yourdomain\.com/ [NC] RewriteCond %{HTTP_REFERER} !^$ RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]