В WordPress система ролей и возможностей (capabilities) является основой для разграничения доступа пользователей к функционалу сайта. Однако иногда возникает ситуация, когда привилегированные пользователи — администраторы, редакторы или другие с расширенными правами — могут случайно или намеренно нанести вред сайту. В этой статье мы разберем, как ограничить и контролировать права таких пользователей, а также приведем практические примеры кода и полезные плагины для решения задачи.
Понимание системы ролей и возможностей в WordPress
В WordPress каждая роль пользователя имеет набор возможностей (capabilities), которые определяют, что именно пользователь может делать. Например, роль администратора (administrator) обладает всеми возможностями, включая установку плагинов, изменение тем, управление пользователями и др. Роль редактора (editor) может публиковать и редактировать записи, но не имеет прав на системные настройки.
Для защиты сайта важно понимать, какие именно возможности несут потенциальный риск, и как их можно ограничить. В частности, если много людей имеет роль администратора, это повышает вероятность ошибок и атак изнутри.
В WordPress можно создавать свои роли и настраивать существующие, изменяя их возможности через функции API, а также использовать плагины для гибкой настройки доступа.
Основные риски от привилегированных пользователей
Привилегированные пользователи могут:
- Удалить важные файлы или записи;
- Установить вредоносные плагины;
- Изменить настройки безопасности;
- Получить доступ к конфиденциальной информации;
- Изменить права других пользователей.
Чтобы минимизировать эти риски, стоит тщательно продумывать, кому и какие права выдавать, а также использовать технические средства контроля и ограничения.
Ограничение прав через код: пример функции wpprotect_limit_admin_capabilities
Создадим функцию, которая убирает у роли администратора возможность удалять пользователей и устанавливать плагины, чтобы избежать случайных или злонамеренных действий.
function wpprotect_limit_admin_capabilities() {
$role = get_role('administrator');
if ($role) {
// Убираем возможность удалять пользователей
$role->remove_cap('delete_users');
// Убираем возможность устанавливать плагины
$role->remove_cap('install_plugins');
$role->remove_cap('update_plugins');
$role->remove_cap('delete_plugins');
}
}
add_action('init', 'wpprotect_limit_admin_capabilities');Этот код следует добавить в файл functions.php активной темы или в отдельный плагин. После этого администраторы не смогут удалять пользователей и управлять плагинами, но сохранят остальные права.
Если нужно ограничить права других ролей, например редакторов, аналогично можно получить роль и убрать или добавить возможности.
Создание кастомной роли с ограниченными правами
Иногда лучше создать новую роль, например «Ограниченный администратор», с набором возможностей, оптимальным для конкретных задач.
function wpprotect_add_limited_admin_role() {
add_role('limited_admin', 'Ограниченный администратор', array(
'read' => true,
'edit_posts' => true,
'delete_posts' => true,
'upload_files' => true,
// Добавляем нужные возможности, но без опасных прав
'manage_options' => false,
'install_plugins' => false,
'delete_users' => false
));
}
register_activation_hook(__FILE__, 'wpprotect_add_limited_admin_role');После активации плагина с этим кодом появится новая роль, которую можно назначать пользователям без риска полного контроля над сайтом.
Плагины для управления ролями и возможностями
Для удобного управления правами пользователей без необходимости писать код можно использовать следующие плагины:
- User Role Editor — один из самых популярных плагинов для создания, редактирования ролей и возможностей. Позволяет точно настроить права.
- Members — плагин с удобным интерфейсом для управления ролями и контроля доступа к контенту.
- Clearfy Pro — расширенный плагин для оптимизации и защиты WordPress, включая настройку ролей и ограничение опасных возможностей.
Эти плагины помогут быстро и надежно настроить систему прав доступа, минимизируя риски.
Пример настройки User Role Editor
После установки и активации плагина в админке появится меню «User Role Editor». Там можно выбрать роль, например «Администратор», и снять галочки с опасных возможностей, таких как delete_users или install_plugins. Изменения сохраняются и вступают в силу сразу.
Дополнительные меры защиты привилегированных пользователей
Кроме ограничения прав, рекомендуется:
- Включить двухфакторную аутентификацию (2FA) для всех пользователей с расширенными правами;
- Использовать сложные пароли и регулярную смену паролей;
- Вести аудит действий пользователей с помощью плагинов, например Expert Review;
- Ограничить доступ к панели администрирования по IP или VPN;
- Резервировать сайт и базы данных регулярно.
Эти меры помогут снизить вероятность компрометации сайта даже при наличии нескольких пользователей с высокими правами.
Отладка и тестирование новых настроек ролей и возможностей
После внесения изменений важно проверить, что пользователи с новыми или измененными ролями действительно имеют те права, которые должны иметь, и не могут выполнять нежелательные действия.
Для этого можно использовать тестовые аккаунты с разными ролями и последовательно проверять:
- Доступ к административной панели;
- Возможность редактирования, публикации и удаления записей;
- Доступ к настройкам плагинов и тем;
- Возможность управления пользователями;
- Возможность установки и удаления плагинов и тем.
Если обнаружатся проблемы, корректируйте права либо с помощью плагинов, либо через код.