Вопрос или проблема
Внезапно мы не смогли попасть в админ-панель сайта. Когда я вхожу на /wp-login.php, меня перенаправляет на главную страницу или /wp-admin (в зависимости от того, посещал ли я wp-admin в незалогиненном состоянии или нет)
Версия WordPress: 5.6.2
Когда происходит перенаправление на /wp-admin
, я вижу:
“Извините, у вас нет доступа к этой странице.”
Моей первой догадкой было то, что кто-то (возможно, другой пользователь с правами администратора) изменил роли. Это было не так, я удостоверился, посмотрев на таблицы базы данных, и пользователи имели wp_capabilities
, соответствующие правам администратора.
Затем я попробовал множество других способов, и ни один не сработал:
-
Создал нового пользователя с помощью
wp_create_user
, добавил права администратора, вошел в этот аккаунт через окно для приватного просмотра. То же самое. -
Перешел на git-репозиторий WordPress, чтобы найти, где появляется “Извините, у вас нет доступа к этой странице.”, это было во многих местах, поэтому я добавил случайную строку текста в некоторые файлы, чтобы точно узнать, откуда она, это происходило из файла
wp-admin/includes/menu.php
в последних строках:if ( ! user_can_access_admin_page() ) {
-
Я подумал, что, возможно,
user_can_access_admin_page()
возвращает неверную информацию по какой-то причине, поэтому использовал шаблон страницы для вывода некоторых данных следующим образом
if ( current_user_can('administrator') ) {
echo "Да, администратор";
}
if ( user_can_access_admin_page() ) {
echo "Может получить доступ к админу";
} else {
echo "Не может получить доступ к админу";
}
Оба вернули true, однако проверка в menu.php
не сработала. Не уверен почему.
-
Заменил папки wp-admin и wp-includes на свежие копии, загруженные из WordPress org.
-
Переименовал папки темы и плагинов, чтобы исключить проблему, возникающую от плагина или темы. Не в этом дело, все осталось так же.
-
Проверил журнал ошибок Apache2, а также включил журнал отладки для WP, чтобы найти любые связанные ошибки, ничего не найдено. Ничего особенного, только обычные замечания PHP, которые я уже видел раньше.
-
В один момент я заметил, что сертификат SSL истек месяц назад (хотя проблема началась вчера), поэтому просто чтобы быть уверенным, я обновил его, но все осталось так же.
Любая идея, что может быть не так, могла бы очень помочь!
Мне удалось это решить.
Причина была в том, что: Данные о ролях пользователей, которые установлены по умолчанию в установке WordPress, полностью отсутствовали в таблице базы данных wp_options
в строке wp_user_roles
.
В моем случае это было так
a:3:{s:14:"backwpup_admin";a:2:{s:4:"name";s:14:"BackWPup Admin";s:12:"capabilities";a:12:{s:4:"read";b:1;s:8:"backwpup";b:1;s:13:"backwpup_jobs";b:1;s:18:"backwpup_jobs_edit";b:1;s:19:"backwpup_jobs_start";b:1;s:16:"backwpup_backups";b:1;s:25:"backwpup_backups_download";b:1;s:23:"backwpup_backups_delete";b:1;s:13:"backwpup_logs";b:1;s:20:"backwpup_logs_delete";b:1;s:17:"backwpup_settings";b:1;s:16:"backwpup_restore";b:1;}}s:14:"backwpup_check";a:2:{s:4:"name";s:21:"BackWPup jobs checker";s:12:"capabilities";a:12:{s:4:"read";b:1;s:8:"backwpup";b:1;s:13:"backwpup_jobs";b:1;s:18:"backwpup_jobs_edit";b:0;s:19:"backwpup_jobs_start";b:0;s:16:"backwpup_backups";b:1;s:25:"backwpup_backups_download";b:0;s:23:"backwpup_backups_delete";b:0;s:13:"backwpup_logs";b:1;s:20:"backwpup_logs_delete";b:0;s:17:"backwpup_settings";b:0;s:16:"backwpup_restore";b:0;}}s:15:"backwpup_helper";a:2:{s:4:"name";s:23:"BackWPup jobs functions";s:12:"capabilities";a:12:{s:4:"read";b:1;s:8:"backwpup";b:1;s:13:"backwpup_jobs";b:1;s:18:"backwpup_jobs_edit";b:0;s:19:"backwpup_jobs_start";b:1;s:16:"backwpup_backups";b:1;s:25:"backwpup_backups_download";b:1;s:23:"backwpup_backups_delete";b:1;s:13:"backwpup_logs";b:1;s:20:"backwpup_logs_delete";b:1;s:17:"backwpup_settings";b:0;s:16:"backwpup_restore";b:0;}}}
В то время как должно было быть Administrator
хотя бы где-то. И эти отсутствующие данные в базе данных заставили систему WordPress вести себя странно (фактически работая именно так, как ожидалось в случае отсутствия данных)
Я знал, как это должно выглядеть, но чтобы проверить это, я сделал следующее: взял wp_user_roles
с другого сайта WP, который я управляю, вставил его в поле таблицы и сохранил, бац! Сайт открылся.
Теперь почему это произошло внезапно?
Ну, в моем случае похоже, что произошло какое-то нарушение, атака, потому что теперь, когда я в панели управления, первым делом я посмотрел на страницу пользователей, и там куча странных учетных записей пользователей.
Так что теперь у меня есть еще одна задача — найти причину и очистить этот беспорядок, но всем, у кого возникают трудности с определением проблем с доступом к странице админки WP и видят сообщение об ошибке, и ничего не помогает, например, отключение плагинов и т. д., обязательно проверьте фактические поля базы данных, соответствуют ли они. Я смог определить это, просто используя print_r
объекта user
и заметив, что не было roles
, затем я использовал методы для добавления роли Administrator
, и она просто не добавлялась, а потом я понял, что сама роль Administrator
отсутствует.
Ответ или решение
Если вы столкнулись с проблемой невозможности доступа к панели администратора WordPress и сообщение гласит «Извините, у вас нет разрешения на доступ к этой странице», это может быть связано с несколькими причинами. Давайте детально разберем возможные причины и пути их устранения, используя методологичный подход и основываясь на представленной проблеме и решении.
Фон проблемы
Неожиданно невозможно попасть в административную панель на сайте WordPress. После авторизации через /wp-login.php
происходит перенаправление на главную страницу или /wp-admin
, в зависимости от того, посещали ли вы /wp-admin
в незарегистрированном состоянии или нет. При этом появляется сообщение: «Извините, у вас нет разрешения на доступ к этой странице».
Версия WordPress: 5.6.2.
Шаги по устранению
-
Проверка ролей и прав доступа пользователей: Первая мысль — возможно, кто-то изменил роли пользователей. Однако в базе данных роли пользователей подтверждены как администраторские.
-
Создание нового пользователя: Попробуйте создать нового пользователя с правами администратора через
wp_create_user
, но даже в учетной записи нового пользователя проблема сохраняется. -
Диагностика использования функций: Выясните, возвращает ли
user_can_access_admin_page()
правильные данные. Создайте шаблон страницы, чтобы вывести информацию с помощью следующих функций:if ( current_user_can('administrator') ) { echo "Да, администратор"; } if ( user_can_access_admin_page() ) { echo "Может получить доступ к администратору"; } else { echo "Не может получить доступ к администратору"; }
Несмотря на то, что обе функции возвращают
true
, проблема не решается. -
Замена папок wp-admin и wp-includes: Замените эти директории на свежезагруженные с официального сайта WordPress.
-
Проверка на вмешательства со стороны тем и плагинов: Переименуйте папки с темами и плагинами, чтобы исключить причину, связанную с ними. Проблема сохраняется.
-
Анализ журналов ошибок и отладка: Проверьте журналы ошибок Apache и включите отладку в WordPress для поиска ошибок. Здесь все в порядке, только обычные PHP-уведомления.
-
SSL-сертификат: Обратите внимание на SSL-сертификат. Хотя он устарел, обновление проблемы не решило.
Причина и решение
Проблема заключалась в отсутствии данных о пользовательских ролях в таблице wp_options
в базе данных. Запись wp_user_roles
была повреждена или удалена:
a:3:{s:14:"backwpup_admin";a:2:{s:4:"name";s:14:"BackWPup Admin"; ...}}
Необходимо было восстановить отсутствие роли Administrator
. В остальных случаях система WordPress просто вела себя правильно для отсутствующего состояния данных. Это было решено путем копирования данных wp_user_roles
с другого сайта и вставки их обратно в текущую базу данных.
Вывод и дальнейшие шаги
После восстановления доступа к панели администратора необходимо выяснить причину уязвимости, так как присутствуют подозрительные учетные записи пользователей, что указывает на возможную кибератаку. Следует прийти к плану действий по безопасности, включая очистку злоумышленников и внедрение дополнительных мер защиты.
Этот комплексный подход поможет вам диагностировать и устранить проблему с доступом к админу WordPress, обеспечивая профессиональное решение. В качестве дополнительной безопасности, рассмотрите возможность проведения аудита безопасности и обновления всех компонент системы, включая ядро WordPress, темы и плагины.