Базовые правила защиты

Я начну с самых простых и стандартных пунктов, которые каждый разработчик должен знать априори.

Безопасный хостинг

При выборе хостинга учитывайте некоторые параметры:

  • Если это виртуальный хостинг, то ваша учетная запись должна быть изолирована от учетных записей других клиентов хостинг-провайдера.
  • Есть возможность автоматического бэкапа.
  • Хостинг имеет файервол и инструмент для сканирования на наличие вредоносных файлов.

Есть хостинг-компании, у которых защита от DDos-атак включена автоматически, без дополнительных затрат.

Регулярное резервное копирование

Запомните — бэкап наше все!

Настройте автоматическое резервное копирование на хостинге, делайте бэкап вручную или используйте плагины, не важно. Главное делайте!

Актуальность версии WordPress

Возможно этот совет покажется простым, но статистика показывает, что только 22% из всех сайтов на WordPress используют последнюю актуальную версию системы. Так что, обновляйте.

Актуальность шаблонов и плагинов

Регулярно обновляйте плагины и темы. Как бы смешно это не звучало, но один не обновленный плагин может быть дырой в безопасности сайта. А вдруг в новом обновлении пофиксен важный баг?

Неиспользуемые темы и плагины должны быть удалены.

Не используйте nulled-шаблоны и плагины

В погоне за экономией вы рискуете потратится еще больше.

Большинство nulled тем и плагинов заражены вредоносными программами или ссылками черных методов поисковой оптимизации.

Вы просто представьте, сколько потом сил (или денег) уйдет на очистку сайта от всякого мусора?

Поэтому, запоминаем: все темы и плагины должны быть скачаны только с официального сайта (репозитория) WordPress и с надежных источников (ThemeForest, Template
Monster
, CodeCanyon).

Отключите вывод PHP-ошибок

Для включения режима отладки и вывода всех возникших PHP-ошибки и предупреждения на сайте используется WP_DEBUG.

После проверки, не забудьте отключить режим отладки! Не дразните злоумышленников.
Для этого в файле wp-config.php проверьте строку:

define( 'WP_DEBUG', false );

Не забывайте и версию PHP обновлять по мере необходимости.

Защита базы данных

SQL-инъекции — одна из самых частых атак на сайты. Внедряя произвольный SQL-код, у злоумышленников появляется возможность изменять базу данных, отправлять ей произвольные запросы и, фактически, творить с БД все что угодно.

Пароль для БД

В качестве пароля для базы данных выберите сложный пароль, содержащий в себе буквы (верхний и нижний регистр), цифры и специальные символы.

Пароль должен состоять как минимум из 6 символов. Если вы используйте легкий пароль, то сейчас же идите и измените. Для этого, откройте панель управления хостингом и
в разделе “Базы данных” выберите необходимую и создайте для нее новый пароль.

После внесите изменения в файл wp-config.php. Найдите строку и впишите актуальный и действующий пароль:

/** Пароль к базе данных MySQL */
define( 'DB_PASSWORD', 'НОВЫЙ ПАРОЛЬ' );

В противном случае, на сайте вы увидите ошибку соединения с базой данных.

Префикс для БД

Не используйте стандартный префикс wp_ для таблиц базы данных.

После внесите изменения в файл wp-config.php. Найдите строку и впишите актуальный и действующий пароль:

Если ваш сайт уже функционирует и вы используете префикс wp_ в БД, то вот вам инструкция к изменению префикса для существующего сайта:

Шаг №1. Откройте wp-config.php и найдите строку со значением $table_prefix. Она у вас должна выглядеть так:

$table_prefix = 'wp_';

Просто возьмите и добавьте вместо префикса другое значение (можно использовать цифры).

Помните

Нижнее подчеркивание в конце должно остаться

В качестве примера я буду использовать следующее:

$table_prefix = 'secure9_';

Шаг №2. Обновите вашу базу данных. Откройте нижнее подчеркивание в конце должно остаться phpMyAdmin, выберите вашу БД и выполните следующие SQL-запросы:

RENAME table `wp_commentmeta` TO `secure9_commentmeta`;
RENAME table `wp_comments` TO `secure9_comments`;
RENAME table `wp_links` TO `secure9_links`;
RENAME table `wp_options` TO `secure9_options`;
RENAME table `wp_postmeta` TO `secure9_postmeta`;
RENAME table `wp_posts` TO `secure9_posts`;
RENAME table `wp_terms` TO `secure9_terms`;
RENAME table `wp_termmeta` TO `secure9_termmeta`;
RENAME table `wp_term_relationships` TO `secure9_term_relationships`;
RENAME table `wp_term_taxonomy` TO `secure9_term_taxonomy`;
RENAME table `wp_usermeta` TO `secure9_usermeta`;
RENAME table `wp_users` TO `secure9_users`;

По умолчанию WordPress имеет 12 таблиц и каждую необходимо обновить. Если у вас больше 12 таблиц (некоторые плагины добавляют свои таблицы в БД), то другие таблицы вам также необходимо обновить. Добавьте их вручную в запрос SQL и выполните его.

Шаг №3. Теперь необходимо проверить опции и пользовательские таблицы метаданных на наличие старого префикса wp_. А именно, нас интересует поле meta_key таблицы метаданных пользователей, и поле option_name у таблицы опций.

Выполните отдельные SQL-запросы на проверку опций и метаданных.

Для таблицы опций используйте:

SELECT * FROM `secure9_options` WHERE `option_name` LIKE `%wp_%`

Для таблицы метаданных используйте:

SELECT * FROM `secure9_usermeta` WHERE `meta_key` LIKE `%wp_%`

После получения результатов запроса, обновите все значения с wp_ на ваш новый настроенный префикс.

Напоминаю

В таблице метаданных пользователей (наша secure9_usermeta) редактируем поле meta_key, а в таблице опций (secure9_options) редактируем поле option_name.

Защита панели администратора

Аналогично с базой, нужно и у админ-панели позаботиться о хорошем пароле и имени пользователя.

Пароль

Придумайте сложный пароль минимум 6 символов, цифры, специальные символы, латинские буквы в верхнем и нижнем регистре.

Никогда и ни при каких обстоятельствах не используйте “qwerty”, “123456”, имена и дни рождения! Пароль должен быть сложным для взлома.

Если вам трудно придумать и/или запомнить такой пароль — используйте генераторы паролей/запишите и сохраните в надежном месте.

Имя пользователя

Избегайте слова: admin, demo, user и пр.

Такое может сойти для тестового сайта, когда вы учитесь, вам лень что-то придумывать. Но на рабочем сайте — увольте. Так делать нельзя.

Если сейчас ваше имя пользователя банально до смешного, удите в phpMyAdmin, выбирайте таблицу содержащее 'users'. Находите в ней свой текущий логин и правите поле user_login.

И да, в данном случае можно обойтись без SQL-запроса. Просто два раза тыкните мышью на вашем логине и исправьте его. Нажмите клавишу Enter, чтобы база приняла ваши настройки.

Защита с помощью файла .htaccess

.htaccess — это файл, в котором задают правила работы веб-сервера только в каталоге, где он размещен, и его дочерних каталогах, без глобальных изменений работы всего сервера.

С помощью .htaccess вы можете заблокировать доступ к панели администратора, запретить выполнение PHP-скриптов в определенных папках.

А теперь, давайте разберемся как все это можно сделать.

Запрещаем доступ к панели администратора

Создайте в папке /wp-admin/ новый файл .htaccess и добавьте туда следующее содержимое:

AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName "WordPress Admin Access Control"
AuthType Basic
<LIMIT GET>
order deny, allow
deny from all
allow from XX.XX.XX.XXX
allow from XX.XX.XX.XXX
</LIMIT>

Вместо XX.XX.XX.XXX — укажите ваш IP-адрес.

А теперь разберем, что означает каждая строчка:

  • AuthUserFile — данная директива задает путь к файлу, содержащий имена и пароли пользователей.
  • Директива AuthGroupFile задает файл с пользователями.
  • Устанавливаем значение /dev/null поскольку отдельныепользователи и группы не участвуют в этом методе аутентификации.
  • AuthName "WordPress Admin Access Control" — область, доступ к которой вы хотите ограничить.
  • AuthType Basic — данная строчка никогда не изменяется в данном типе аутентификации.
<LIMIT GET>
order deny, allow
deny from all
allow from XX.XX.XX.XXX
allow from XX.XX.XX.XXX
</LIMIT>

Данные правило запрещает доступ к панели управления для всех IP, кроме тех, которые вы укажите.

При использовании данного типа защиты, учитывайте следующее:

  • Если используйте несколько подключений для работы с сайтом, вам необходимо указать ВСЕ IP-адреса.
  • Если у вас динамический IP, то такой метод лучше не использовать.

В случае, если вам ну уж очень хочется использовать такой способ, а IP динамический, добавьте в .htaccess следующее содержимое:

<LIMIT GET>
order deny,allow
deny from all
</LIMIT>

Никто не сможет попасть в панель администратора. Доступ будет запрещен для всех, включая вас.

Чтобы попасть в панель нужно будет просто удалить файл. А затем залить снова. Подходит для редко обновляемых сайтов. Но как вариант рассмотреть можно.

Помните

Для этого способа защиты вы должны создать новый файл .htaccess в директории /wp-admin/. Если вы добавите правила в .htaccess в корне сайта, то доступ будет ограничен ко всему сайту в целом!

Отключение выполнения PHP-скриптов в отдельных папках

Еще один способ взлома сайта, это когда хакеры загружают вредоносные скрипты в папку /wp-content/uploads.

Чтобы избежать этого, создайте файл .htaccess в папке /wpcontent/ uploads и укажите там следующее правило:

<Files *.php>
deny from all
</Files>

Данное правило запретит выполнение любых PHP-скриптов в папке /wp-content/uploads.

Таким образом, если хакеры и загрузят вредоносные скрипты, то сами скрипты не смогут быть выполнены.

Защита wp-config.php

Файл wp-config.php содержит настройки ядра WordPress, данные для доступа к базе данных. Неудивительно, что часто он является целью хакерских атак.

Чтобы обезопасить wp-config.php укажите следующее правило в .htaccess:

<files wp-config.php>
order allow,deny
deny from all
</files>

Таким способом, мы запретим доступ кому-либо к конфигурационному файлу.

Генерация новых секретных ключей (уникальные ключи и соли для аутентификации)

Еще способ обезопасить файл wp-config.php:

Сгенерировать новые ключи можно через сервис ключей на сайте WordPress.org перейдя по ссылке.

Вставьте новые ключи вместо старых и все. Новые ключи сделают существующие файлы cookies недействительными. Пользователям потребуется авторизоваться снова.

Выключение редактирования файлов

WordPress имеет встроенный редактор, который позволяет редактировать PHP-файлы прямо в панели администратора. И при взломе админ-панели, редактор файлов может быть первой вещью, на которую хакеры обратят внимание.Чтобы выключить возможность редактирования файлов в панели управления, добавьте следующую строку в файл wp-config.php:

define( 'DISALLOW_FILE_EDIT', true );

А добавление строки:

define( ‘DISALLOW_FILE_MODS’, true );

запретит редактирование файлов ядра и не даст обновлять темы и плагины.

Нестандартный путь админ-панели

Все знают, что стандартный путь к панели управления WordPress является:

https://mysite.com/wp-admin

Всем известный, легкодоступный.
Любой человек, зная используемую CMS, может попробовать войти в панель.

WordPress можно установить в подкаталог, при этом сайт будет работать в корневом каталоге сайта.

То есть, установим систему, скажем по следующему пути:

https://mysite.com/command/wp-admin

В подкаталоге /command будут расположены все файлы WordPress. А сам сайт при этом останется доступен по своему мосновному адресу:

https://mysite.com

Перед тем как начать:

  • Очистите кэш сайта и отключите плагины кэширования
  • Во избежании багов, сбросьте настройки постоянных
  • ссылок на «По умолчанию»
  • Сделайте бэкап сайта

Как переместить:

В панели администратора перейдите в Настройки — Основные и измените WordPress Address (URL) на новый. Укажите ту папку, в которую будете перемещать файлы WordPress.
В моем случае это /command:

Сохраните настройки.

Не пытайтесь посмотреть в это время сайт. Ничего не будет работать.

Создайте каталог, в который вы переместите файлы системы — /command.

Переместите файлы WordPress в новый подкаталог. Скопируйте файлы index.php и .htaccess из подкаталога WordPress в корневую папку вашего сайта. У вас должна получиться следующая структура файлов:

Откройте файл index.php (тот, который находится в корневой папке) и внесите изменения в строку:

require('./wp-blog-header.php');

Добавьте название вашего подкаталога перед слэшем:

require('./command/wp-blog-header.php');

Откройте админ-панель, используя новый адрес:

https://mysite.com/command/wp-admin

Если вы все сделали правильно, то сайт будет работать корректно и без ошибок.

Для обновления постоянных ссылок, перейдите в раздел Постоянные ссылки и обновите шаблон.

Включите плагины кэширования и наслаждайтесь работой.

P.S. В качестве названия подкаталога НЕ используйте популярные: admin, panel и пр.

Двухфакторная аутентификация

Двухфакторная аутентификация добавляет дополнительную защиту для страницы авторизации. После подтверждения имени пользователя, она добавляет еще один этап, наподобие тех, что используется для доступа к онлайн-банку или другим конфиденциальным данным.

Включить ее очень легко: просто установите плагин для двухфакторной аутентификации (Two-Factor, Two Factor Authentication, Wordfence Login Security и пр.) и следуйтеинструкциям выбранного плагина.

Далее я расскажу вам, как настроить защиту с использованием Google reCaptcha и саму двухфакторную аутентификацию на примере данного плагина.

Как установить защиту через Google Recaptha v3

Этот способ не сработает, если вы используете на сайте WooCommerce.

  • Перейдите на сайт, в админ-консоль.
  • Регистрируете свой сайт (нажмите на + в меню справа).
  • Заполняете все необходимые данные, выбираете тип reCaptcha (должна быть 3 версия).

После отправки данных у вас будут доступны ключи.

Затем открываете админ-панель WordPress и выбираете там Wordfence Login Security и переходите во вкладку Settings.

Ключи reCaptcha нужно добавить сюда:

Настройка двухфакторной аутентификации с помощью Wordfence Login Security

Wordfence Login Security бесплатно предоставляет следующий функционал:

  • двухфакторная аутентификация с использованием Google Authenticator, Authy, 1Password, FreeOTP
  • включение OTP для любой роли сайта
  • отсутствие ограничений любого рода
  • защита от ботов
  • защита от перебора паролей и перехвата учетных данных путем блокирования по большим IP пулам
  • защита XMLRPC двухфакторной аутентификацией или отключение этого функционала вовсе.

По умолчанию только администраторы могут использовать 2FA. Вы можете включить 2FA для других ролей на сайте, и каждый пользователь может управлять своими собственными устройствами 2FA. Пользователи без прав администратора увидят отдельное меню безопасности входа в левом меню WordPress, когда вы включите 2FA для своих ролей.

Итак, сама настройка:

  • Перейдите в свою учетную запись в панели управления и активируйте режим двухфакторной аутентификации.
  • Скачайте мобильное приложение аутентификации себе на телефон (Google Authenticator, FreeOTP, или Authy).
  • Отсканируйте код или введите ключи для аутентификации.
  • Введите код с приложения для аутентификации в это поле и нажмите Активировать.

Далее при каждой авторизации в панель управления, сайт будет требовать код. Открываете приложение, вводите код и пользуйтесь сайтом спокойно.

Плагины защиты

Для взлома и заражения сайта хакеры используют дыры в шаблонах и плагинах. Перебирают пароли и многое другое. Важно быть начеку и максимально обезопасить сайт.

Существует множество различных плагинов безопасности. Самые популярные и часто используемые — это Wordfence Security и Sucuri.

WordFence Security

Плагин Wordfence один из самых популярных плагинов для защиты WordPress. У него более 3 миллионов установок, и более трех тысяч положительных отзывов.

Мне нравится этот плагин, как минимум за то, что функций бесплатной версии для простого блога или небольшого сайта вполне достаточно.

Плагин сравнивает файлы движка, тем и плагинов с оригинальными версиями из репозитория. Таким образом, если файлы изменились, вы получите уведомление.

Также у него есть:

  • FireWall, который определяет подозрительный трафик и блокирует известные атаки, поддерживает и обновляет базу угроз.
  • Защита от Bruetforce атак. Он блокирует пользователей после большого количества неудачных попыток входа (перебор паролей), за слишком частую попытку восстановить пароль, или, опционально, использующих неверное имя пользователя.
  • Ручная блокировка по IP-адресу или диапазону адресов.

В премиум версии доступны:

  • Черный список в режиме реального времени.
  • Дополнительные правила для FireWall и обновление базы угроз в реальном времени (постоянно).
  • Блокировка по странам.

Sucuri Security

Плагин защитит вас от DDOS атак, содержит черный список, сканирует ваш сайт на наличие вредоносных программ и управляет вашим фаерволом. При обнаружении чего-либо. вы будете оповещены через электронную почту. Google, Norton, McAfee – в этот плагин включены все черные списки из этих программ.