В этом руководстве мы не отвечаем на вопросы о повышении безопасности сервера. Здесь вы не найдете информацию о запрете доступа к каталогам и файлам, настройке резервного копирования, и других методах усиления защиты серверов 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
Будьте внимательны, и не забудьте скачать резервную копию базы данных перед началом изменений.
После внесения изменений, задайте новое значение переменной $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
.