Защищаем учетную запись администратора.

+17
2.83K
Приветствую сообщников v
Пару дней назад думал над защитой пароля администратора, в общем то вариантов не много и все они стандартны — увеличиваем длину пароля, используем большой и маленький регистр букв, используем специальные символы… Хорошо конечно… Но не удобно… Даже, если запомнить не сложно, то вводить каждый раз, гемор еще тот… sick

Лень — двигатель прогресса, по крайней мере для меня (не, ну еще, конечно, двигатель прогресса ловить халяву с минимальными усилиями, хитрой смекалкой и минимальным кодом joke), поэтому я подумал, а почему бы не придумать алгоритм для входа, известный только тебе, так сказать полиморфный пароль(если абстрагироваться от типов), или я уже где то видел эту идею, просто вспомнилось, не суть… Идея хорошая, будем реализовывать popcorn



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

Итого, если у вас пароль к примеру 'superadmin', а время на ваших часах в правом нижнем углу 23:19, то вводить надо будет 'superadmin19', я думаю, ни чего сложного =))

При ошибке ввода минут в конце пароля, будем маскировать это, как ошибку ввода каптчи, что бы не делать лишних телодвижений в коде smoke

Итак, для этой цели нам нужно будет править контроллер авторизации:

/system/controllers/auth/actions/login.php

после кода
  1.  
  2. if (cmsUser::sessionGet('is_auth_captcha') && $this->options['auth_captcha']){
  3. $is_captcha_valid = cmsEventsManager::hook('captcha_validate', $this->request);
  4. }
  5.  
вставляем
  1.  
  2. if($is_captcha_valid){
  3. if($this->model->getUserIdForEmail($email) == 1){
  4. $is_captcha_valid = cmsEventsManager::hook('password_validate', $password);
  5. $password = cmsEventsManager::hook('password_original', $password);
  6. }
  7. }
  8.  

/system/controllers/auth/manifest.php

добавляем ключи
  1.  
  2. 'password_validate'
  3. 'password_original'
  4.  
что бы получилось вот так
  1.  
  2. return array(
  3. 'hooks' => array(
  4. 'user_profile_update',
  5. 'frontpage',
  6. 'frontpage_types',
  7. 'password_validate',
  8. 'password_original'
  9. )
  10. );
  11.  

/system/controllers/auth/model.php

добавляем метод
  1.  
  2. public function getUserIdForEmail($email){
  3. $table_name = 'users';
  4. $field_name = 'email';
  5. $field_value = $email;
  6. $table_ar = array();
  7. $table_ar = $this->getItemByField($table_name, $field_name, $field_value);
  8. if(!empty($table_ar['id'])){
  9. return $table_ar['id'];
  10. }
  11. return false;
  12. }
  13.  
в папку /system/controllers/auth/hooks/

добавляем 2 файла из архива


Кому лень производить все эти манипуляции, создал архив который нужно распаковать в корень сайта с заменой файлов. ТОЛЬКО ДЛЯ ВЕРСИИ 2.7.1 !!!

ДЛЯ ВЕРСИИ InstantCMS 2.7.2 И ВЫШЕ

В версии 2.7.2 изменен механизм обработки событий, поэтому необходимо добавить их в админке:

Панель управления -> Компоненты -> Управление событиями

Иллюстрация


ОЧЕНЬ ВАЖНО! ДЕЛАЙТЕ ВСЕ МАНИПУЛЯЦИИ ТОЛЬКО НА КОПИИ РАБОТАЮЩЕГО САЙТА!!! ОТВЕТСТВЕННОСТЬ ЗА КРИВЫЕ РУКИ НЕСТИ НЕ БУДУ !



Так же, нужно проверить что ваше время в минутах совпадает со временем минут на сервере, для этого можно создать файл в корне сайта, например test_minute.php с кодом
  1.  
  2. <?php
  3. echo '<div>' . date('i') . '</div>';
  4. ?>
  5.  
После этого выполнить этот файл, вашсайт/test_minute.php
Если минуты в выводе совпадают с выводом минут вашей системы, то все хорошо =)

ДАННЫЙ ХАК НЕ ИЗМЕНЯЕТ ВАШ ПАРОЛЬ АДМИНИСТРАТОРА, А ТОЛЬКО ДОБАВЛЯЕТ ФИШКУ АВТОРИЗАЦИИ!

По всем вопросам пишем сюда stukили sellshipkaiisvyo@icloud.com для тех у кого нет регистрации

Всех благодарю за внимание v
0
Алексей Т Алексей Т 7 лет назад #
Привет! Все это отлично что вы пробуете себя в разработке+
А вот столько колобков в посте это перебор. С праздником!
+2
maix0044 maix0044 7 лет назад #
Здравствуйте. Пробовать себя в разработке перестал несколько лет назад, сейчас это основной вид зароботка. Колобки делают жизнь немного ярче, на то они и созданы stuk Вас тоже с праздником ! v
0
Sonat Sonat 7 лет назад #
Первое что пришло в голову при виде


А разве при таком подходе мы не ломаем капчу?
Ведь результаты ее проверки теперь не важны... scratch
0
maix0044 maix0044 7 лет назад #
Отличное замечание ! Спасибо ! Сейчас выпущу багфикс, еще раз благодарю joke
0
maix0044 maix0044 7 лет назад #
Поправил, еще раз спасибо zst
0
Alexprofi Alexprofi 7 лет назад #
А что, классная вещь, спасибо, может пригодиться!
Только если случится какой-то сбой по времени, то капец, - на сайт не зайдешь?
+1
maix0044 maix0044 7 лет назад #
Ни разу не встречал сбой по времени на сервере, намного больше вероятность не правильного отображения времени на клиентской машине, ну и у вас есть доступ к файлам, можно по ftp закоментить код .. =))
0
Alexprofi Alexprofi 7 лет назад #
Я клиентский комп. и имел ввиду. Бывает при загрузке время сбивается.
Но выход действительно есть!
+4
Alexneva Alexneva 7 лет назад #
Хм, креативная идея.
+1
Капитан Капитан 7 лет назад #
Можно добавлять в конце не минуты, а часы. Исчезнет проблема не точных часов и удобство намного возрастет.
0
al955 al955 7 лет назад #
а как сделать не минуты, а часы?
0
al955 al955 7 лет назад #
lass onAuthPasswordValidate extends cmsAction {
public function run($password){
$hour = substr($password, -2);
if($hour == date('H')){
return true;
}
return false;
}
}
?>

Часы вместо минут
0
al955 al955 7 лет назад #
После обновления на 2.7.2 этот способ работает только, если включен режим отладки.
0
maix0044 maix0044 7 лет назад #
Панель управления -> Компоненты -> Управление событиями -> нажать кнопку "Обновить события в базе данных".

Еще от автора

Социальный замок
По мотивам темы на форуме. Скрипт был взят на сайте pluso, обернут в виджет для легкого использования.
Шифруемся =)
Ребят, привет😊 Всегда хотел написать что нибудь связанное с шифрованием, не слишком сложное, но достаточное что бы потешить свое самолюбие😊 Самым прос
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.