В последнее время мне очень часто приходят письма на тему: «Как защитить сайт на WordPress от взлома»? Кто-то спрашивает в качестве превентивных мер, кто-то уже постфактум — после того, как взлом произошел. Поскольку в процессе переписки у меня сложился определенный набор советов, я решил опубликовать его в качестве статьи.
Для начала, любой владелец сайта, блога или магазина на WordPress, должен понимать 4 простые вещи:
1. Не бывает 100% защищенного сайта или хостинга — любую систему можно взломать, пусть даже она прошла сотни аудитов. А значит к взлому всегда нужно быть готовым и не терять бдительности;
2. Безопасность Вашего проекта во многом зависит от Ваших же действий — начиная от паролей уровня «1234» до раздачи неизвестно кому прав доступа и установки неизвестных скриптов;
3. Качественный хостер должен прилагать усилия для защиты своих серверов от взлома, но ни один хостер не занимается непосредственно безопасностью Ваших проектов;
4. «Дыра» в безопасности может образоваться не только от WordPress и его плагинов, но также от любого стороннего скрипта, который Вы установите на тот же хостинг-аккаунт, где расположен сайт.
Итак, вот те общие советы по безопасности, которые я могу дать каждому владельцу сайта на WordPress.
- Установите двухфакторную аутентификацию (получение дополнительного OTP-пароля по SMS или в Google Authenticator) при входе в хостинг-аккаунт — качественный хостинг должен позволять это сделать.
- Установите запрет входа по FTP для всех IP, кроме своего. Качественный хостинг должен иметь такую опцию в панели управления.
- Установите запрет доступа к странице wp-login.php (страница входа) для всех IP, кроме своего. Если у Вас динамический IP-адрес, по мере необходимости будете изменять его через FTP. Сделать это можно с помощью размещения следующего кода в файле .htaccess в корне сайта (xxx.xxx.xx.xx замените на свой IP-адрес, узнать его можно, к примеру, тут):
<Files wp-login.php> Order Deny,Allow Deny from all Allow from xxx.xx.xx.xx </Files>
- Установите запрет входа в административную часть WordPress (папка wp-admin) для всех IP, кроме своего. Создайте в папке uploads свой файл .htaccess и поместите в него следующие строки (xxx.xxx.xx.xx замените на свой IP-адрес, узнать его можно, к примеру, тут):
order deny,allow allow from xxx.xxx.xx.xx deny from all
- Установите запрет доступа к файлу wp-config.php (конфигурационный файл WordPress) — для всех. Поместите в файл .htaccess, расположенный в корне сайта, следующие строки:
<Files wp-config.php> order deny,allow deny from all </Files>
- Установите запрет на выполнение скриптов и внешний доступ к папке uploads — разрешите только загрузку картинок. Создайте в папке uploads свой файл .htaccess и поместите в него следующие строки:
<FilesMatch "\.(gif|jpg|png)$"> Allow from all </FilesMatch> Deny from all
- Поменяйте логин администратора. И хотя в последних версиях WordPress можно сразу задавать отличный от «admin» логин для пользователя с правами администратора, многие по привычке все равно вводят именно это слово.
- Если Вам не нужна регистрация на сайте, зайдите в раздел «Параметры» -> «Общие» и снимите чекбокс «Любой может зарегистрироваться».
- Запретите редактирование файлов тем и плагинов из админ-панели — по-умолчанию, в WordPress встроен редактор файлов тем и плагинов для администратора. С одной стороны это удобно, с другой — небезопасно, поскольку если злоумышленник получит доступ к Вашему админ-аккаунту, он сможет редактировать весь сайт. Для того, чтобы запретить эту возможность, добавьте в wp-config.php следующую строку:
define('DISALLOW_FILE_EDIT', true);
- Не используйте бесплатные темы, если Вы не обладаете хотя бы минимальными навыками в языках программирования. Поймите простую вещь — если тема бесплатная и ее исходный код открыт, значит ее можно напичкать любым вредоносным кодом.
- Если навыки у Вас есть, перед заливкой темы на сервер, обязательно вручную проверьте все файлы темы на предмет вкрапления неизвестного кода, в особенности шифрованного (base64 и т.д.).
- Никогда не устанавливайте плагины с неизвестных сайтов, форумов или блогов. Никто не знает, что скрывается за красивой страницей с описанием. Если Вы берете плагин с сайта разработчика, то во-первых, убедитесь в том, что этот разработчик действительно профессионал, во-вторых — убедитесь, что это его официальный сайт.
- Устанавливайте плагины разумно — во-первых, учитывайте, что плагины, даже взятые из официального репозитория WordPress не являются безопасными, поскольку команда разработки WP не проводит аудит сторонних плагинов, и во-вторых — чем меньше плагинов, тем меньше памяти потребляет WP и, следовательно, тем быстрее загружается сайт.
- Не устанавливайте непопулярные плагины — ставьте только те, на которые есть большое количество отзывов пользователей — это дает хотя бы минимальную гарантию, что плагин потенциально безопасен;
- Не храните неиспользуемые и не обновляемые плагины — даже деактивированный плагин с «дыркой» все равно позволит злоумышленнику добраться до Вашего сайта.
- Делайте ежедневные резервные копии — для этих целей я использую плагин BackWPup. Кстати, обратите внимание на количество скачиваний плагина на момент написания этой статьи – более миллиона пользователей. Это и есть так называемый «пользовательский аудит».
- Обязательно настройте выгрузку файлов резервных копий в Dropbox (BackWPup это позволяет), а также установите приложение Dropbox на Ваш компьютер. Таким образом Вы будете иметь 3 независимых копии резервного архива — в на сервере сайта, в облаке Dropbox и на вашем личном компьютере.
- Обязательно периодически проверяйте целостность архивов — иногда, при создании архива, могут возникать сбои. В этом случае файл резервной копии будет поврежден, а Вы будете продолжать считать, что все в порядке.
- Количество хранимых архивов должно быть от 10 штук — дело в том, что иногда дата взлома и дата обнаружения взлома не совпадают. Учитывайте, что к понятию «взлом» относится не только deface сайта (изменение внешнего вида), но куда чаще Ваш сайт могут сделать частью сети для спам-рассылки, а узнаете Вы об этом только из письма хостера об аномальной почтовой активности. При этом целостность самого сайта нарушена не будет — все будет работать как и раньше. Поэтому важно иметь не только вчерашнюю версию резервной копии, но и за более ранний период.
Чтобы сократить количество используемого под резервные копии места, достаточно не включать в архив папку с картинками (/upload) — храните их на локальном компьютере. А файлы и база весят очень немного. - Поставьте плагин для обсчета контрольных сумм файлов. Я уже много лет использую WordPress File Monitor. Этот плагин позволяет регулярно проверять в автоматическом и ручном режимах, изменения в текущих файлах и добавление новых. Понятно, что отображаться будут и Ваши собственные изменения, но тут уже нужно помнить/записывать — что и где Вы меняли.
- Установите плагин защиты. Например, Wordfence Security — целый программный комплекс, включающий в себя сканер, антивирус, furewall, блокировщик и много других функций.
- Купите нормальный антивирус для компьютера — необходимо понимать, что часть червей или троянов под Windows умеют не только заражать локальный компьютер, но также и воровать пароли доступа к сайтам, «размножаться» через доступ к Вашему ftp — заливая туда свои копии, расширять спам-бот сеть за счет заражения сайтов, к которым есть административный доступ и т.д. Да, я понимаю, что хороший антивирус стоит определенную сумму в год, но, поверьте, тот же ESET Smart Security за ~$40 / год, не покажется Вам таким дорогим, когда придется восстанавливать весь сайт.
- Периодически проверяйте логи сервера на предмет посторонних входов в не публичную часть сайта.
- Регулярно обновляйте WordPress и плагины — учитывайте, что какие бы исправления безопасности не проводила команда WordPress, если Вы не обновляете движок, то все это бессмысленно.
Но обновляться нужно разумно — при мажорных изменениях (1-2 цифра версии), сразу обновляться не стоит — лучше подождать до выхода следующей версии, в которой ошибки нового функционала (а такие есть всегда) будут выловлены и исправлены. При минорных измениях (3+ цифра версии) — можно обновляться сразу, поскольку чаще всего это не изменения, а исправления безопасности и функционала.
А что посоветуете Вы?