Способы защиты сайта от взлома на WordPress
WordPress — одна из самых популярных платформ для создания и управления веб-сайтами. С более чем 40% долей рынка веб-сайтов, работающих на системе управления контентом (CMS), WordPress является привлекательной целью для хакеров и злоумышленников. В свете этого, обеспечение безопасности вашего сайта WordPress становится важной задачей.
Чек-лист безопасности сайта WordPress представляет собой набор мер и рекомендаций, которые помогут защитить ваш сайт от потенциальных угроз. Он включает в себя различные аспекты безопасности, начиная от выбора надежных паролей и обновления плагинов, заканчивая установкой защитных плагинов и регулярным созданием резервных копий.
В данной статье мы предлагаем вам подробный чек-лист безопасности сайта WordPress, который поможет вам защитить ваш сайт от взлома и сохранить целостность вашей информации. Отслеживая и выполняя каждый пункт этого чек-листа, вы сможете уверенно обезопасить свой сайт WordPress и снизить риск возникновения проблем в будущем.
Запомните, что безопасность — это непрерывный процесс, и важно регулярно обновлять свои меры безопасности в соответствии с развивающимися угрозами. Следуя рекомендациям этого чек-листа, вы сможете обеспечить надежную защиту для вашего сайта WordPress и спокойно заниматься развитием вашего онлайн-присутствия.
Разовые настройки защиты сайта от взлома:
- Сложные пароли — Даже на этапе тестирования сайта (когда ну никто же о нем не узнает)
Сложные пароли — это как минимум 8 символов, в которых обязательно будут цифры, большие и маленькие буквы, и, конечно же, спец символы. Пример: (*&%RI&%WK8MYGF^*Ruheqwgf16r8re&%Hvwef - Актуальная версия WordPress, безопасный шаблон и минимум плагинов
- можно раз в месяц проверять список плагинов, которые установлены на ваших сайтах через поиск, инфу о их взломах
- Не используйте nulled шаблоны для WordPress
- не используйте под каждое небольшое решение отдельный плагин, старайтесь использовать мультиплагины которые решают сразу несколько задач, их качественней поддерживают/обновляют и реже взламывают
- Меняйте логин админа — затруднит взлом
- Для этого необходимо запустить phpMyAdmin, выбрать нужную базу данных и выполнить следующий SQL запрос, который изменяет логин администратора и имя пользователя администратора.
- UPDATE wp_users SET user_login = ‘NewLoginAdmin’, user_nicename = ‘newadminname’ WHERE user_login = ‘Admin’
- Запрет просмотра директорий сайта и запрет доступа к файлу htaccess
# Запрет на просмотр директорий сайта
Options All -Indexes# Запрет доступа к .htaccess
order allow,deny
deny from all - Запрет доступа к файлу wp-config.php
# Запрещаем доступ к wp-config.php
order allow,deny
deny from all - Защищаем каталог wp-includes
# Ограничиваем доступ к wp-includes
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L] - Запрет доступа к каталогу wp-content
# Блокируем любые запросы к каталогу
Order deny,allow
Deny from all
# Разрешаем запрашивать файлы с определенными расширениями
Allow from all
Где, svg|ttf|woff|eot|xml|css|js|jpe?g|png|gif|pdf|docx|rtf|odf|zip|rar? – это все типы файлов, к которым можно обращаться, ко всем остальным нельзя. - Запрет доступа к XML-RPC (Есть в Clearfy Pro)
# Запрещаем доступ к xmlrpc.php
Satisfy any
Order allow,deny
Deny from all - Отключите доступ к REST API вашего WordPress (Есть в Clearfy Pro)
- Убедитесь, что ваш сайт имеет SSL-сертификат
- Блокируем вредоносные запросы, защищаем сайт от SQL-инъекций и запрещаем выполнение произвольных команд
# Определяем и блокируем исполнение вредоносных команд# Определяем и блокируем вредоносные запросы к сайту
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK|DEBUG) [NC]
RewriteCond %{THE_REQUEST} \?\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} \/\*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} etc/passwd [NC,OR]
RewriteCond %{THE_REQUEST} cgi-bin [NC,OR]
RewriteCond %{THE_REQUEST} (%0A|%0D) [NC,OR]
RewriteRule ^(.*)$ - [F,L]
RewriteEngine On
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(\.\.//?)+ [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC,OR]
RewriteCond %{QUERY_STRING} \=PHP[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} [NC,OR]
RewriteCond %{QUERY_STRING} (\.\./|\.\.) [OR]
RewriteCond %{QUERY_STRING} ftp\: [NC,OR]
RewriteCond %{QUERY_STRING} http\: [NC,OR]
RewriteCond %{QUERY_STRING} https\: [NC,OR]
RewriteCond %{QUERY_STRING} \=\|w\| [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)/self/(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)cPath=http://(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*iframe.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^i]*i)+frame.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
RewriteCond %{QUERY_STRING} base64_(en|de)code[^(]*\([^)]*\) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>).* [NC,OR]
RewriteCond %{QUERY_STRING} (NULL|OUTFILE|LOAD_FILE) [OR]
RewriteCond %{QUERY_STRING} (\./|\../|\…/)+(motd|etc|bin) [NC,OR]
RewriteCond %{QUERY_STRING} (localhost|loopback|127\.0\.0\.1) [NC,OR]
RewriteCond %{QUERY_STRING} (<|>|’|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{QUERY_STRING} concat[^\(]*\( [NC,OR]
RewriteCond %{QUERY_STRING} union([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} union([^a]*a)+ll([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} (;|<|>|’|»|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*
(/\*|union|select|insert|drop|delete|update|cast|create|char|convert|alter|declare|order|script|set|md5|benchmark|encode) [NC,OR]
RewriteCond %{QUERY_STRING} (sp_executesql) [NC]
RewriteRule ^(.*)$ — [F,L]Если у вас VDS стоит поставить пароль на phpMyAdmin - Защищаем скрипт timthumb.php
# Ограничиваем использование эксплоита timthumb
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_URI} (timthumb\.php|phpthumb\.php|thumb\.php|thumbs\.php) [NC]
RewriteRule . - [S=1] - Дополнительная HTTP аутентификация для логина в Админку
# Аутентификация
Где «wp-login.php» — это скрипт, отвечающий за авторизацию, к которому мы запрещаем доступ всем пользователям, которые не прошли аутентификацию, а «/абсолютный_путь_к_файлу/.htpasswd» — это абсолютный путь к файлу .htpasswd, в котором хранится в зашифрованном виде соответствующий логин и пароль. Данный логин и пароль должны отличаться от логина и пароля администратора сайта.
AuthType basic
AuthName 'Access Denied'
AuthUserFile /абсолютный_путь_к_файлу/.htpasswd
Require valid-user
Чтобы сгенерировать содержимое файла htpasswd можно воспользоваться специальными сервисами, например, — http://www.htaccesstools.com/htpasswd-generator/- Закрыть возможность регистрации новых пользователей
- Отключите комментарии, если они вам не нужны
- Скрываем версию CMS
// Скрываем версию WordPress
remove_action('wp_head', 'wp_generator'); - Убираем комментарии из кода (к плагинам и т.д.)
//Убираем лишние комментарии из кода
function callback($buffer) { $buffer = preg_replace('//', '', $buffer); return $buffer; }
function buffer_start() { ob_start("callback"); }
function buffer_end() { ob_end_flush(); }
add_action('get_header', 'buffer_start');
add_action('wp_footer', 'buffer_end'); - Изменение стандартного префикса таблиц в базе данных
UPDATE mp12_options SET option_name = 'mp12_user_roles'
WHERE option_name = 'wp_user_roles';
UPDATE mp12_usermeta SET meta_key = 'mp12_capabilities'
WHERE meta_key = 'wp_capabilities';
$table_prefix = 'mp12_'; - Блокируйте выполнение PHP-скриптов в тех WP каталогах, где это не требуется
- Настройте создание резервных копий, в идеале каждый день, как минимум раз в 3-4 дня — это поможет быстро восстановить исходные файлы сайта, а если сайт удалят, у вас всегда есть актуальная копия
- Disable Emoji
- Delete dns-prefetch
- Отключите редактирование тем и плагинов на уровне панели администратора WordPress
- Нет информации о релокейте wp-config.php
- Релокейте панели логина с /wp-login на что-то другое
- Ханейпот (логин-панель перекидываем на другой URL, но оставляем живой пустой URL /wp-login
— Любого клиента, кто будет стучаться на /wp-login , можно банить на Х дней тем же Fail2Ban, потому что он точно бот - На куки нужно установить Cookie Flags and Prefixes
- Вбить в гугл wordpress online security scanner и проверить всеми найденными сканерами. Вообще, самое эффективное решение — взять Burp Security suite , но это дорого и профессионально
- Сложные пароли — Даже на этапе тестирования сайта (когда ну никто же о нем не узнает)
Постоянные проверки для защиты сайта от взлома:
Проводите постоянный мониторинг нагрузки на хостинг — раз в 10-20 дней
Минимум раз в 10-15 дней проверять и обновлять плагины
Выглядит сложно и дорого? Ваш сайт — ваш доход, безопасность сайта — ваша ответственность, 95% этих пунктов настраиваются 1-ин раз, и повышают безопасность сайта в 10-тки раз.
P.S Часть из этих пунктов решается плагином Clearfy Pro
© PhoenixProject, при полном или частичном копировании материала ссылка на первоисточник обязательна.
Комментариев: 0