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

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

Небольшой отступление — да, это премиум пост, и ввиду отсутствия рекламы, премиум посты будут периодически появляться на моём сайте, однако во первых, не чаще, чем раз в месяц, во вторых — в них никогда не будут попадать общие руководства по WordPress, как например руководство по миниатюрам или по работе с WP_Cron. В рубрику премиум постов войдут в основном мои собственные наработки, которых особо и не встретишь в интернете.

Шаг 1. Скрываем пользователя отовсюду, где он может выводиться 

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

Это может быть например страница со всеми пользователями в админке или выпадающий список авторов. Код работает для всех циклов вывода пользователей сайта без исключения.

Этот код доступен только для зарегистрированных пользователей и регистрация закрыта. Как жаль!

Войдите на сайт, если вы уже зарегистрированы »

  • Строчка 5 — воспользуемся функцией get_option() для получения ID скрытого пользователя из поля _pre_user_id.
  • 7-й строкой, при помощи get_current_user_id() проверяем, совпадает ли ID текущего авторизованного пользователя с ID скрытого администратора, который находится в wp_options базы данных сайта. Если совпадает, то никаких манипуляций делать не будем, просто выходим из функции (зачем скрывать себя от себя самого же).

Шаг 2. Корректируем счетчики количества пользователей, чтобы никто ничего не заподозрил 

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

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

Чтобы такого нонсенса не происходило, просто используйте этот код:

Этот код доступен только для зарегистрированных пользователей и регистрация закрыта. Как жаль!

Войдите на сайт, если вы уже зарегистрированы »

  • Получаемый функцией массив $views содержит примерно следующую информацию:
    Array
    (
        [all] => <a href='users.php' class="current">Все <span class="count">(3)</span></a>
        [administrator] => <a href='users.php?role=administrator'>Администратор <span class="count">(2)</span></a>
        [editor] => <a href='users.php?role=editor'>Редактор <span class="count">(1)</span></a>
    )

    И наша задача в этом массиве уменьшить на единицу количество пользователей для «Все» и для «Администратор»

  • Я не стал далеко ходить и сделал всё просто — через PHP-функцию explode(), но думаю тут можно сделать и меньше строчек кода при помощи регулярных выражений.

Шаг 3. Закрываем доступ к странице редактирования пользователя 


Дело в том, что на страницу редактирования каждого пользователя можно попасть просто подбирая параметр ID в строке браузера, например wp-admin/user-edit.php?user_id=ТУТ_ПОДБИРАЕМ_ID.

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

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

Ошибка о неверном ID пользователя WordPress
Сообщение о неверном ID при попытке доступа к странице редактирования скрытого пользователя.

Код будет следующий:

Этот код доступен только для зарегистрированных пользователей и регистрация закрыта. Как жаль!

Войдите на сайт, если вы уже зарегистрированы »

В принципе тут всё очень просто — опять при помощи get_option() получаем из базы ID скрытого пользователя и просто сравниваем его с переменной $_GET['user_id'].

Шаг 4. Ставим запрет на удаление пользователя 


А дело в том, что с удалением ситуация в точности такая же — у нас есть возможность попасть напрямую на страницу удаления любого пользователя в админке просто подбирая GET-параметр в браузерной строке.

Давайте сделаем так, чтобы выводилось точно такое же сообщение, как в предыдущем шаге, о некорректном ID пользователя.

Этот код доступен только для зарегистрированных пользователей и регистрация закрыта. Как жаль!

Войдите на сайт, если вы уже зарегистрированы »

  • На 7-8 строчке мы просто проверяем, что находимся именно на странице удаления пользователя.
  • На 9-й должно выполняться одно из двух условий — либо пользователя не существует вовсе, либо это как раз таки страница удаления скрытого пользователя.

Шаг 5. Ставим защиту от удаления или изменения пользователя напрямую через базу данных 


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

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

Этот код доступен только для зарегистрированных пользователей и регистрация закрыта. Как жаль!

Войдите на сайт, если вы уже зарегистрированы »

В заключение: Весь код целиком 

Для того, чтобы вам было удобно, я собрал весь код в одном месте. Вставлять я думаю вы знаете куда, ну а если не знаете, то и functions.php сгодится.

Этот код доступен только для зарегистрированных пользователей и регистрация закрыта. Как жаль!

Войдите на сайт, если вы уже зарегистрированы »

Как защитить свой собственный сайт от подобных вещей. 


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

Поэтому разберемся именно с теми способами защиты, которые не дадут пользователю особо навредить.

Этот код доступен только для зарегистрированных пользователей и регистрация закрыта. Как жаль!

Войдите на сайт, если вы уже зарегистрированы »
Миша Рудрастых Разработчик WordPress WooCommerce

Миша Рудрастых

Впервые познакомился с WordPress в 2009 году, и после двух лет мучений с Joomla и самописными движками это был просто бальзам на душу. С 2014 года меня можно встретить на WordCamp — официальной конфе по WP в Москве, иногда там выступаю. Также в настоящее время веду курсы по WordPress в Epic Skills в Питере.

Смотрите также