Приветствую сообщников
Пару дней назад думал над защитой пароля администратора, в общем то вариантов не много и все они стандартны — увеличиваем длину пароля, используем большой и маленький регистр букв, используем специальные символы… Хорошо конечно… Но не удобно… Даже, если запомнить не сложно, то вводить каждый раз, гемор еще тот…
Лень — двигатель прогресса, по крайней мере для меня (не, ну еще, конечно, двигатель прогресса ловить халяву с минимальными усилиями, хитрой смекалкой и минимальным кодом ), поэтому я подумал, а почему бы не придумать алгоритм для входа, известный только тебе, так сказать полиморфный пароль(если абстрагироваться от типов), или я уже где то видел эту идею, просто вспомнилось, не суть… Идея хорошая, будем реализовывать
Самой простой в реализации, я посчитал, это добавление меняющегося кода в конец основного пароля администратора, в данном случае мы будем использовать показания минут на часах
Итого, если у вас пароль к примеру 'superadmin', а время на ваших часах в правом нижнем углу 23:19, то вводить надо будет 'superadmin19', я думаю, ни чего сложного =))
При ошибке ввода минут в конце пароля, будем маскировать это, как ошибку ввода каптчи, что бы не делать лишних телодвижений в коде
Итак, для этой цели нам нужно будет править контроллер авторизации:
/system/controllers/auth/actions/login.php
после кода
вставляем
/system/controllers/auth/manifest.php
добавляем ключи
что бы получилось вот так
/system/controllers/auth/model.php
добавляем метод
в папку /system/controllers/auth/hooks/
добавляем 2 файла из архива
Кому лень производить все эти манипуляции, создал архив который нужно распаковать в корень сайта с заменой файлов. ТОЛЬКО ДЛЯ ВЕРСИИ 2.7.1 !!!
Панель управления -> Компоненты -> Управление событиями
Так же, нужно проверить что ваше время в минутах совпадает со временем минут на сервере, для этого можно создать файл в корне сайта, например test_minute.php с кодом
После этого выполнить этот файл, вашсайт/test_minute.php
Если минуты в выводе совпадают с выводом минут вашей системы, то все хорошо =)
Всех благодарю за внимание
Пару дней назад думал над защитой пароля администратора, в общем то вариантов не много и все они стандартны — увеличиваем длину пароля, используем большой и маленький регистр букв, используем специальные символы… Хорошо конечно… Но не удобно… Даже, если запомнить не сложно, то вводить каждый раз, гемор еще тот…
Лень — двигатель прогресса, по крайней мере для меня (не, ну еще, конечно, двигатель прогресса ловить халяву с минимальными усилиями, хитрой смекалкой и минимальным кодом ), поэтому я подумал, а почему бы не придумать алгоритм для входа, известный только тебе, так сказать полиморфный пароль(если абстрагироваться от типов), или я уже где то видел эту идею, просто вспомнилось, не суть… Идея хорошая, будем реализовывать
Самой простой в реализации, я посчитал, это добавление меняющегося кода в конец основного пароля администратора, в данном случае мы будем использовать показания минут на часах
Итого, если у вас пароль к примеру 'superadmin', а время на ваших часах в правом нижнем углу 23:19, то вводить надо будет 'superadmin19', я думаю, ни чего сложного =))
При ошибке ввода минут в конце пароля, будем маскировать это, как ошибку ввода каптчи, что бы не делать лишних телодвижений в коде
Итак, для этой цели нам нужно будет править контроллер авторизации:
/system/controllers/auth/actions/login.php
после кода
if (cmsUser::sessionGet('is_auth_captcha') && $this->options['auth_captcha']){ $is_captcha_valid = cmsEventsManager::hook('captcha_validate', $this->request); }
if($is_captcha_valid){ if($this->model->getUserIdForEmail($email) == 1){ $is_captcha_valid = cmsEventsManager::hook('password_validate', $password); $password = cmsEventsManager::hook('password_original', $password); } }
/system/controllers/auth/manifest.php
добавляем ключи
'password_validate' 'password_original'
'user_profile_update', 'frontpage', 'frontpage_types', 'password_validate', 'password_original' ) );
/system/controllers/auth/model.php
добавляем метод
public function getUserIdForEmail($email){ $table_name = 'users'; $field_name = 'email'; $field_value = $email; $table_ar = $this->getItemByField($table_name, $field_name, $field_value); return $table_ar['id']; } return false; }
добавляем 2 файла из архива
Кому лень производить все эти манипуляции, создал архив который нужно распаковать в корень сайта с заменой файлов. ТОЛЬКО ДЛЯ ВЕРСИИ 2.7.1 !!!
ДЛЯ ВЕРСИИ InstantCMS 2.7.2 И ВЫШЕ
В версии 2.7.2 изменен механизм обработки событий, поэтому необходимо добавить их в админке:Панель управления -> Компоненты -> Управление событиями
ОЧЕНЬ ВАЖНО! ДЕЛАЙТЕ ВСЕ МАНИПУЛЯЦИИ ТОЛЬКО НА КОПИИ РАБОТАЮЩЕГО САЙТА!!! ОТВЕТСТВЕННОСТЬ ЗА КРИВЫЕ РУКИ НЕСТИ НЕ БУДУ !
Так же, нужно проверить что ваше время в минутах совпадает со временем минут на сервере, для этого можно создать файл в корне сайта, например test_minute.php с кодом
<?php ?>
Если минуты в выводе совпадают с выводом минут вашей системы, то все хорошо =)
ДАННЫЙ ХАК НЕ ИЗМЕНЯЕТ ВАШ ПАРОЛЬ АДМИНИСТРАТОРА, А ТОЛЬКО ДОБАВЛЯЕТ ФИШКУ АВТОРИЗАЦИИ!
По всем вопросам пишем сюда или sellshipkaiisvyo@icloud.com для тех у кого нет регистрацииВсех благодарю за внимание
Реклама #
Алексей Т 7 лет назад #
А вот столько колобков в посте это перебор. С праздником!
maix0044 7 лет назад #
Sonat 7 лет назад #
А разве при таком подходе мы не ломаем капчу?
Ведь результаты ее проверки теперь не важны...
maix0044 7 лет назад #
maix0044 7 лет назад #
Alexprofi 7 лет назад #
Только если случится какой-то сбой по времени, то капец, - на сайт не зайдешь?
maix0044 7 лет назад #
Alexprofi 7 лет назад #
Но выход действительно есть!
Alexneva 7 лет назад #
Капитан 7 лет назад #
al955 7 лет назад #
al955 7 лет назад #
public function run($password){
$hour = substr($password, -2);
if($hour == date('H')){
return true;
}
return false;
}
}
?>
Часы вместо минут
al955 7 лет назад #
maix0044 7 лет назад #