Руководство по защите сайтов на WordPress без плагинов

Разработчик сайтов на WordPress

В этом руководстве мы не отвечаем на вопросы о повышении безопасности сервера. Здесь вы не найдете информацию о запрете доступа к каталогам и файлам, настройке резервного копирования, и других методах усиления защиты серверов Apache и Nginx.

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

Из руководства вы узнаете как повысить устойчивость сайта к различным типам атак: внедрению SQL-кода, DDoS, перебору паролей.

Основные меры безопасности

Чтобы WordPress оставался безопасным потребуется регулярное обновление редакции. Не забывайте обновлять CMS и дополнительные плагины в панели администратора.

Включите автообновление ядра WordPress с помощью добавления константы в functions.php:

define( 'WP_AUTO_UPDATE_CORE', true );

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

Запрет редактирования плагинов и тем оформления

По умолчанию у администраторов WordPress включена возможность редактирования исходного кода плагинов и тем из веб-браузера.

Чтобы отключить редактор, разместите константу в wp-config.php:

define( 'DISALLOW_FILE_EDIT', true );

Изменение префикса таблиц в базе данных

На странице установки WordPress задан стандартный префикс базы данных wp_. Администратор может заменить его на что-либо иное еще до установки системы.

Мы рекомендуем устанавливать свой префикс, например abc_. Уверены, что так вы повысите безопасность базы данных вашего сайта в несколько раз.

Для изменения префикса таблиц на сайте с историей можно использовать phpMyAdmin. Примеры команд для переименования таблиц:

rename table wp_posts to prefix_posts
rename table wp_postmeta to prefix_postmeta
phpMyAdmin

Пример выполнения запроса к БД MySQL в приложении phpMyAdmin.

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

После внесения изменений, задайте новое значение переменной $table_prefix в файле wp-config.php:

$table_prefix = 'abc_';

Миграция файла wp-config.php

Размещение файла wp-config.php в непубличном каталоге снизит вероятность получения злоумышленником информации о базе данных.

Для усиления защиты WordPress создайте папку с названием configs в каталоге пользователя на сервере. Обычно эта директория находится на один уровень выше каталога установки.

Скопируйте файл в /username/configs/, а затем удалите все инструкции в исходном файле и укажите новый адрес:

require_once( '/username/configs/wp-config.php' );

А еще можно использовать константу ABSPATH:

define( 'ABSPATH', dirname(__FILE__) . '/' );
require_once( ABSPATH . '../username/configs/wp-config.php' );

Удаление версии редакции WordPress

Уязвимости редакций WordPress публикуются в открытом доступе. Чтобы ваш сайт не попал в поле зрения сканеров, удалите мета-тег версии из публичной части сайта.

Добавьте фильтр в functions.php вашей темы:

add_filter( 'the_generator', '__return_null' );

Удаление версий скриптов и стилей

Версии скриптов и стилей могут сканироваться ботами для поиска уязвимостей в плагинах и темах оформления сайта. Для их удаления разместите функцию в файле functions.php:

function remove_ver_css_js( $src, $handle ) {
    if ( strpos( $src, 'ver=' ) )
    $src = remove_query_arg( 'ver', $src );
    return $src;
}
add_filter( 'style_loader_src', 'remove_ver_css_js', 99, 2 );
add_filter( 'script_loader_src', 'remove_ver_css_js', 99, 2 );

Отключение XML-RPC

Протокол вызова удаленных процедур XML-RPC предназначен для публикации, редактирования/удаления постов и комментариев. Этот механизм часто используется для DDoS-атак, рассылки спама и перебора пароля администратора.

Для отключения методов XML-RPC, требующих аутентификации, используйте фильтр в functions.php вашей темы:

add_filter( 'xmlrpc_enabled', '__return_false' );

Изменение текста ошибок авторизации

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

Для повышения безопасности рекомендуется привести текст ошибок к общей формулировке. Добавьте код на основе встроенного фильтра в functions.php вашей темы:

add_filter( 'login_errors', function ( $message ) {
    return "Неверный логин или пароль";
} );

Валидация, санация, экранирование и другие страшные слова

Важно, чтобы написанный вами программный код был безопасным. Для защиты от хакерских атак не забывайте использовать встроенные функции для форматирования данных из пользовательских форм. Они подробно описаны в файле /wp-includes/formatting.php.

Аватар пользователя: Николай Дубков
Веб-разработчик