WordPress является самой популярной CMS, что делает его привлекательной целью для злоумышленников. Для защиты вашего сайта важно знать, где находятся «слабые места» (уязвимые точки) и как их устранить. Ниже мы перечисляем основные уязвимости, описываем угрозы и предлагаем набор практических мер для их устранения. Помните, что безопасность – это комплексный процесс, и применение одного метода зачастую не защищает сайт полностью.
I. Структура файлов WordPress
Перед началом обсуждения уязвимостей следует коротко напомнить о базовой файловой структуре:
- wp-admin/ – папка с административными файлами. Ограничение доступа к ней имеет первостепенное значение.
- wp-includes/ – содержит основные библиотеки и файлы «ядра» WordPress. Их изменение может привести к нестабильной работе.
- wp-content/ – хранит темы, плагины и медиафайлы. Именно эта папка часто становится мишенью хакеров.
- wp-config.php – главный конфигурационный файл, содержащий данные доступа к базе и уникальные ключи шифрования. Его защита критична для безопасности сайта.
Зная эту структуру, можно определить, какие компоненты требуют дополнительной защиты.
II. Основные уязвимости и меры по их устранению
1. Backdoors (задние двери)
Угроза: Хакеры могут внедрить скрытые скрипты, позволяющие обходить стандартные меры защиты и получать постоянный доступ (через wp-admin, FTP, SFTP и т.д.).
Практический совет:
- Регулярно используйте сканеры (например, SiteCheck или WordFence) для поиска скрытых файлов.
- Ограничьте права доступа к критическим папкам (см. пункт 8 ниже).
- Настройте файл .htaccess для защиты wp-admin, например, запретив доступ с незнакомых IP.
- Запретите выполнение файлов PHP в не предназначенных для этого каталогах, чтобы повысить безопасность вашей платформы. Следуя решениям на сайте wpbeginner, откройте текстовый редактор и введите следующий код:
<Files *.php> deny from all </Files>
Сохраните этот текстовый файл как .htaccess и загрузите его в папку /wp-content/uploads/ на вашем сайте.
Примечание: Даже если регулярно сканировать сайт, дополнительная мера (например, двухфакторная аутентификация) помогает снизить риск повторного внедрения backdoor.
2. Pharma-хаки
Угроза: Злоумышленники внедряют злонамеренный код в устаревшие плагины или темы, что приводит к показу ненадлежащей рекламы (чаще всего фармацевтической) в результатах поиска.
Практический совет:
- Всегда обновляйте WordPress, плагины и темы до последних версий.
- Пользуйтесь автоматическими сканерами (Sucuri, WordFence) для обнаружения вредоносного кода в базе данных.
Примечание: Обновление – необходимая мера, но даже она не гарантирует защиту, если к сайту внедрен скрытый вредоносный код. Контроль содержания базы данных и мониторинг изменений также важны.
3. Brute-Force атаки на логин
Угроза: Автоматизированные скрипты могут перебирать пароли, если используются слабые учетные данные, что приведет к несанкционированному доступу.
Практический совет:
- Используйте сильные, уникальные пароли и замените стандартное имя администратора «admin» на другое. Пример для изменения имени администратора в phpMyAdmin:
UPDATE wp_users SET user_login = 'newadminuser' WHERE user_login = 'admin';
- Ограничьте количество попыток входа с помощью плагинов (например, Limit Login Attempts Reloaded или Login LockDown).
- Внедрите двухфакторную аутентификацию (по типу Google Authenticator, Duo, Authy).
- Если вы не планируете использовать REST API от Wordpress, то лучше отключить его с помощью плагина Disable Rest Api.
Примечание: Ограничение попыток входа помогает, но при использовании одного лишь ограничения злоумышленник может применить методы обхода – поэтому обязательно комбинировать с двухфакторной аутентификацией.
4. Злонамеренные перенаправления (Redirects)
Угроза: Вредоносный код в файлах .htaccess или в темах/плагинах может перенаправлять пользователей на вредоносные сайты, снижающие доверие и рискующие заражением устройств.
Практический совет:
- Проверьте и регулярно анализируйте файлы .htaccess на наличие нежелательных правил.
- Если обнаружены подозрительные перенаправления, удалите их. Например, правило в .htaccess должно выглядеть корректно и соответствовать вашей структуре сайта.
Примечание: Регулярное сканирование файловой системы и аудит конфигурации .htaccess являются обязательными мерами – одного анализа недостаточно, если злоумышленник умеет изменять файлы на сервере.
5. Cross-Site Scripting (XSS)
Угроза: Внедрение вредоносного JavaScript-кода через комментарии, формы или другие вводимые данные, что может привести к краже сессионных данных, захвату учетных записей и изменению содержимого страниц.
Практический совет:
- Всегда фильтруйте и экранируйте пользовательский ввод с помощью встроенных функций WordPress (например, esc_html(), esc_attr()).
- Используйте плагины безопасности, которые блокируют XSS-атаки (например, WordFence).
- Если функционал комментариев вам не сильно важен, лучше вообще его отключить. Открываем консоль сайта, переходим в раздел «Настройки» и выбираем вкладку «Обсуждение». Снимаем галочку с пункта «Разрешить оставлять комментарии к новым записям», пролистываем страницу до конца и жмем кнопку «Сохранить изменения».
- Рекомендую также отключить регистрацию пользователей, если она вам не нужна. Войдите в административную панель WordPress. Перейдите на страницу «Настройки» (Settings) -> «Общее» (General). Снимите галочку с опции «Любой может зарегистрироваться» (Anyone can register). Нажмите кнопку «Сохранить изменения» (Save Changes) внизу страницы.
Примечание: Экранирование данных необходимо проводить на стороне вывода, а не только при сохранении, поэтому комплексное решение (и серверная проверка, и код-ревью) важно.
6. Denial-of-Service (DoS) и DDoS атаки
Угроза: Атаки на перегрузку сервера могут привести к недоступности сайта для легитимных пользователей.
Практический совет:
- Используйте специализированные сервисы защиты от DDoS, такие как Cloudflare или Sucuri, которые фильтруют злонамеренный трафик.
- Настройте лимиты на уровне сервера (например, через конфигурацию Nginx или Apache) для ограничения количества одновременных запросов от одного IP.
Примечание: Очевидно, что меры на уровне веб-приложения недостаточны – необходима комплексная защита на уровне хостинга и сети.
7. Устаревшая версия PHP
Угроза: Использование устаревших версий PHP означает отсутствие обновлений безопасности, что эксплуатируется злоумышленниками.
Практический совет:
- Обновите версию PHP до 8.0+.
- Можно проверить текущую версию через Pingdom или запросом к заголовку X-Powered-By, либо через панель управления хостингом.
Примечание: Обновление PHP значительно повышает производительность и безопасность, но требует проверки совместимости плагинов и тем.
8. Неправильные права доступа (File & Folder Permissions)
Угроза: Избыточно либеральные права доступа позволяют злоумышленнику изменять или читать важные файлы (например, wp-config.php), что может привести к утечке данных или внедрению вредоносного кода.
Практический совет:
- Для файлов установите права 644 (или 640), для папок – 755 (или 750).
- Особое внимание уделите файлу wp-config.php – поставьте права 400 или 440.
- Пример команды (Linux):
chmod 400 wp-config.php
Примечание: Правильная настройка прав доступа помогает защититься, но если сайт скомпрометирован через устаревшие плагины, этого может быть недостаточно.
9. Отсутствие обновлений WordPress, плагинов и тем
Угроза: Использование устаревших компонентов увеличивает поверхность атаки, ведь в них могут быть известные уязвимости.
Практический совет:
- Регулярно обновляйте ядро WordPress, плагины и темы.
- Настройте автоматические обновления (если это практично для вашего сайта) или используйте систему уведомлений об обновлении.
Примечание: Обновления критичны, но и обновлённые, если не проверены плагины могут содержать скрытые уязвимости, поэтому выбирайте только доверенный софт.
10. XML-RPC
Угроза: Функция XML-RPC может позволить проведения массовых brute-force атак и использовать метод system.multicall для отправки множества запросов в рамках одного HTTP-запроса.
Практический совет:
- Если XML-RPC не используется (а большинство сайтов его не нуждаются), полностью отключите его.
- Для отключения можно установить плагин Disable XML-RPC API, либо добавить следующий код в functions.php:
add_filter('xmlrpc_enabled', '__return_false');
Примечание: Некоторые плагины (например, Jetpack) требуют XML-RPC, поэтому отключение его может нарушить функциональность. В таком случае рассмотрите меры ограничения доступа к нему (например, через файрвол на уровне сервера).
11. Защита административного интерфейса
Угроза: Админ-панель является основным местом атаки, через которое злоумышленники могут получить контроль над сайтом.
Практический совет:
a) Измените стандартную URL для входа (wp-admin, wp-login.php) с помощью плагинов, например, WPS Hide Login.
b) Ограничьте количество попыток входа с помощью Limit Login Attempts Reloaded.
c) Добавьте HTTP-авторизацию для защиты wp-admin. Пример для Apache:
Создайте .htpasswd с вашим паролем и добавьте в .htaccess (wp-admin):
AuthName "Admins Only"
AuthUserFile /home/youruser/.htpasswds/wp-admin/.htpasswd
AuthType basic
require user yourusername
d) Включите двухфакторную аутентификацию (плагины Duo, Google Authenticator, Two Factor Authentication).
Примечание: Менять только URL входа мешает автоматизированным атакам, но злоумышленник может найти другие точки входа, поэтому дополнительные меры (лимит попыток, 2FA) обязательны.
12. HTTPS и SSL
Угроза: Передача данных по незащищённому протоколу HTTP означает, что данные (логины, сессии, передаваемая информация) могут быть перехвачены злоумышленниками.
Практический совет:
- Установите SSL-сертификат (бесплатный от Let’s Encrypt, например) и настройте сайт на работу через HTTPS.
- Добавьте в wp-config.php:
define('FORCE_SSL_ADMIN', true);
Проверьте корректность установки с помощью онлайн-инструментов.
Примечание: Использование HTTPS улучшает безопасность, но само по себе не защищает сайт от взлома плагинов или серверных уязвимостей, поэтому данный метод надо совмещать с другими мерами.
13. HTTP-секьюрити-заголовки
Угроза: Отсутствие специальных заголовков снизит защиту от XSS, clickjacking и других атак.
Практический совет:
- - В настройках веб-сервера (Apache или Nginx) добавьте следующие заголовки:
Content-Security-Policy
X-XSS-Protection
Strict-Transport-Security
X-Frame-Options
X-Content-Type-Options
Пример для Apache (в файле .htaccess):
Header set X-Frame-Options "SAMEORIGIN"
Header set X-Content-Type-Options "nosniff"
Header set X-XSS-Protection "1; mode=block"
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"
14. Защита базы данных
Угроза: Стандартное имя базы данных и префикс таблиц («wp_») легко угадываются, что упрощает атаки на базу.
Практический совет:
- При установке WordPress измените табличный префикс на что-то уникальное (например, вместо wp_ используйте 39xw_).
- Также выберите нестандартное имя базы данных, если это возможно.
Примечание: Эта мера снижает вероятность атак, но не защитит от уязвимостей в установленных плагинах.
15. Отключение возможности редактировать файлы из панели (File Editing)
Угроза: Если злоумышленник получает доступ к панели, он может изменить файлы через встроенный редактор, внедряя вредоносный код.
Практический совет:
Добавьте следующую строку в файл wp-config.php, чтобы отключить редактор тем и плагинов:
define('DISALLOW_FILE_EDIT', true);
Примечание: Это не отменяет необходимости защищать сам доступ к панели. Дополнительные меры, такие как ограничение IP, двухфакторная аутентификация и изменение URL входа, обязательны.
16. Hotlinking (нежелательное использование изображений извне)
Угроза: Другие сайты могут использовать ваши изображения, увеличивая нагрузку на сервер и расходуя ваш трафик.
Практический совет для Apache (в файле .htaccess):
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ http://dropbox.com/placeholder.jpg [NC,R,L]
Практический совет для Nginx:
location ~ .(gif|png|jpe?g)$ {
valid_referers none blocked ~.google. ~.bing. ~.yahoo yourdomain.com *.yourdomain.com;
if ($invalid_referer) {
return 403;
}
}
Примечание: Защита от хотлинкинга снижает нагрузку, но не устраняет большинство других угроз. Необходимо комбинировать с другими мерами безопасности.
17. Регулярное создание бэкапов
Угроза: Даже при комплексной защите сайт может быть скомпрометирован – бэкапы позволяют восстановить данные без потерь.
Практический совет:
- Настройте автоматические резервные копии с помощью специализированных сервисов или плагинов (UpdraftPlus, BackupBuddy, BlogVault).
- Храните копии на внешних источниках (Amazon S3, Google Drive, Dropbox).
Примечание: Бэкапы – последний рубеж защиты, их наличие не предотвращает атаки, но позволяет минимизировать ущерб.
18. Использование специальных плагинов безопасности
Помимо собственных настроек и ручной корректировки конфигурации, рекомендуется установить и регулярно обновлять проверенные плагины безопасности, которые помогают обнаруживать угрозы и автоматически настраивать защиту.
Среди самых популярных и эффективных решений:
- WordFence Security – включает в себя файрвол, сканер вредоносного кода, мониторинг входящих попыток и многое другое.
- iThemes Security – предлагает более 30 настроек для жесткой защиты, таких как ограничение попыток входа, изменение URL-адреса входа, отключение редактирования файлов из админки и др.
- Sucuri Security – обеспечивает сканирование на наличие вредоносного кода, мониторинг целостности файлов и предупреждения о подозрительной активности.
- All In One WP Security & Firewall – комплексное решение, которое визуально отображает уровень защиты сайта и позволяет быстро применить рекомендуемые настройки.
Важно помнить, что плагин сам по себе не решит всех проблем, поэтому его следует использовать в комплексе с другими методами защиты и регулярным аудитом безопасности.
19. Обновление ключей безопасности WordPress
WordPress использует набор уникальных "соль" (Security Keys), которые улучшают шифрование информации, хранящейся в cookies. Если вы переносите сайт или получаете его от стороннего разработчика, рекомендуется обновить эти ключи:
- Посетите официальное [генератор ключей безопасности WordPress](https://api.wordpress.org/secret-key/1.1/salt/), чтобы создать новые значения.
- Вставьте полученные значения в файл wp-config.php, заменив старые.
Это помогает немедленно аннулировать уже созданные сессионные cookie, если они были скомпрометированы. Однако обновление ключей не защитит от других уязвимостей, поэтому оно должно быть частью общей стратегии безопасности.
20. Скрытие версии WordPress
Вывод версии WordPress в качестве метатега (и в файле readme.html) может облегчить работу злоумышленникам, позволяя им определить потенциальные уязвимости, характерные для конкретной версии системы. Для повышения безопасности:
• Удалите метатег версии из заголовка, добавив в functions.php вашей темы следующий код:
function wp_version_remove_version() {
return '';
}
add_filter('the_generator', 'wp_version_remove_version');
• Удалите файл readme.html из корня установки WordPress.
III. Заключение
Каждая из перечисленных уязвимостей угрожает вашей WordPress-сайте по-своему, и ни одна мера не способна полностью устранить риск. Именно поэтому важно применять комплексный (многоуровневый) подход к безопасности: правильная настройка прав доступа, регулярные обновления, ограничение доступа к административной панели, использование HTTPS, настройка HTTP-заголовков, применение современных мер защиты на серверном и сетевом уровне, а также регулярное создание бэкапов. Совместное применение всех этих мер значительно снизит вероятность успешного взлома и защитит ваш бизнес и данные.
Внедряйте указанные практические советы, регулярно проводите аудит безопасности и следите за обновлениями – и ваш сайт будет гораздо надёжнее и защищённее.