Доброго всем времени суток!
Продолжая серию Инстант "по взрослому", сегодня хотел бы показать более мощный плагин авторизации.
Как мы уже выяснили в первой части, авторизация не защищена от подбора пароля пользователя, будь хоть он суперадмин сайта. Даже если мы поставим запись логов от Fuze, то вся информация будет только после в логах. Нам же нужно как то реагировать на действия злоумышленников, и при этом не создавать трудностей простым пользователям.
И тут на помощь нам приходит технология "аякс", давайте попробуем применить его "волшебные свойства"
Итак, плагин p_realauth, возьмем за источник наш предыдущий плагин, и добавим в него ajax-функционал метода(экшена) auth компонента registration. Это позволит нам немного ускорить работу с сайтом пользователя, убратьдурацкоене очень фунциональное сообщение об ошибке с 5-ти секундной задержкой а так же позволит получать капчу через аякс автоматически созданные картинки для прохождения теста Тьюринга передаваемые через асинхронные запросы в ходе обмена данными между сервером и браузером. 😊
Чтобы нам не "хакать" систему для привязки плагина, поменяем html код входа на сайт прямо на клиенте, с помощью javascript.
Соответственно, добавим еще два события, первый для получения капчи с сервера, второй — для запуска работы нашего плагина. Т.е. если нам плагин вдруг не нужен — мы его выключаем и все работает по старому.
разбор наших событий
Обработка события GET_REGISTRATION_ACTION_AUTH — это взятая обработка из стандартной поставки Инстанта с выводом текста через ajax. Тут код приводить не буду — кому интересно, глянет в плагине, засорять не буду.
Код вывода капчи -
как написано в комментариях к коду для 1.10.4 нужно поменять вызов, и вообще уже сегодня увидел, что капчу можно просить у CMS напрямую, без кучи вызовов смарти, плагинов того же смарти. Вообщем есть что еще поменять.
Остальной код не так интересен как бы хотелось, расскажу о функционале
Работает следующим образом — если вы неверно ввели пароль для пользователя 3 раза — после третьего ввода пароля "вылезет" блок с капчой (или капчей ???). После верного ввода, сбросит счетчик и так опять до 3-го неверного пароля. Количество неверных вводов можете указать в настройках плагина.
Минусы -
— подсчет паролей для пользователя один на все сессии — т.е. если с одного компьютера постоянно вбивать пароли — у пользователя тоже вылезет капча с первого раза
— не обновляется уже "вылезшая" капча, если пользователь опять ошибся с паролем
— немного не информативные сообщения об ошибках (но исчезают весело 😊 )
Все эти минусы будут поправлены в окончательной третьей версии плагина, буду сам использовать на всех своих сайтах и с вами поделюсь (если Fuze капчу не прибьет в следующих версиях). Но пока капча есть — будет польза от плагина.
Также будет возможность использовать этот функционал в модуле(окне).
Забираем, смотрим плагин (предыдущий можно удалить)
P.S. ах да, совсем забыл про авторизацию через соцсети — будет обязательно 😊
Продолжая серию Инстант "по взрослому", сегодня хотел бы показать более мощный плагин авторизации.
Как мы уже выяснили в первой части, авторизация не защищена от подбора пароля пользователя, будь хоть он суперадмин сайта. Даже если мы поставим запись логов от Fuze, то вся информация будет только после в логах. Нам же нужно как то реагировать на действия злоумышленников, и при этом не создавать трудностей простым пользователям.
И тут на помощь нам приходит технология "аякс", давайте попробуем применить его "волшебные свойства"
Итак, плагин p_realauth, возьмем за источник наш предыдущий плагин, и добавим в него ajax-функционал метода(экшена) auth компонента registration. Это позволит нам немного ускорить работу с сайтом пользователя, убрать
Чтобы нам не "хакать" систему для привязки плагина, поменяем html код входа на сайт прямо на клиенте, с помощью javascript.
Соответственно, добавим еще два события, первый для получения капчи с сервера, второй — для запуска работы нашего плагина. Т.е. если нам плагин вдруг не нужен — мы его выключаем и все работает по старому.
разбор наших событий
parent::execute(); switch ($event){ case 'GET_ROUTE_REGISTRATION': $data = $this->eventGetRoutes($data); break; case 'GET_REGISTRATION_ACTION_AUTH': $data = $this->eventAuth(); break; case 'REALAUTH_START': $data = $this->eventStartPlugin(); break; case 'GET_REGISTRATION_ACTION_SHOW_CAPTCHA': $data = $this->eventCaptcha(); break; case 'USER_LOGIN': $this->eventUserLogin($data); break; } return $data; }
Код вывода капчи -
// вывод в шаблон com_registration_login функционала запроса Капчи // добавьте туда {php}cmsCore::callEvent('REALAUTH_START', array());{/php} // пока не будет добавлено функционал не заработает private function eventCaptcha() { $inCore = cmsCore::getInstance(); // для 1.10.4 тут надо cmsPage::initTemplate $smarty= $this->inCore->initSmarty('plugins', 'p_captcha.tpl'); $smarty->display('p_captcha.tpl'); if (cmsCore::isAjax()) }
Остальной код не так интересен как бы хотелось, расскажу о функционале
Работает следующим образом — если вы неверно ввели пароль для пользователя 3 раза — после третьего ввода пароля "вылезет" блок с капчой (или капчей ???). После верного ввода, сбросит счетчик и так опять до 3-го неверного пароля. Количество неверных вводов можете указать в настройках плагина.
Минусы -
— подсчет паролей для пользователя один на все сессии — т.е. если с одного компьютера постоянно вбивать пароли — у пользователя тоже вылезет капча с первого раза
— не обновляется уже "вылезшая" капча, если пользователь опять ошибся с паролем
— немного не информативные сообщения об ошибках (но исчезают весело 😊 )
Все эти минусы будут поправлены в окончательной третьей версии плагина, буду сам использовать на всех своих сайтах и с вами поделюсь (если Fuze капчу не прибьет в следующих версиях). Но пока капча есть — будет польза от плагина.
Также будет возможность использовать этот функционал в модуле(окне).
Забираем, смотрим плагин (предыдущий можно удалить)
Группе, к которой вы принадлежите, запрещено просматривать этот скрытый текст
P.S. ах да, совсем забыл про авторизацию через соцсети — будет обязательно 😊
Реклама #
Sonat 10 лет назад #
Крот 10 лет назад #
Крот 10 лет назад #
Sonat 10 лет назад #
В буфер скопировал пароль 7 знаков "123456 " - седьмой знак пробел,
1 - вставляю из буфера в поле пароль (вижу что звёздочек 7) и прохожу авторизацию
2 - выхожу
3 - вставляю из буфера тоже самое удаляю последний символ пароля (вижу что звездочек 6) и тоже прохожу авторизацию.
4 - выхожу
5 - набираю с морды заведомо неверный пароль, грит неверный и выкидывает на аторизацию
6 - вставляю из буфера пароль (тот что ранее проходил) Результат - "Неверные логин или пароль:Неверно указан код на картинке!
хотя пароль был верный и кода никакого мне не показывалось.
Крот 10 лет назад #
public static function strClear($input, $strip_tags=true){
................
$string = trim((string)$input);
................
это раз
похоже кто-то еще вместе с вами его залочил)
сделаю на основе сессий - там можно будет уже точно сказать, а сейчас такой проблемы (кроме пробела в пароле) пока не вижу
это два
Sonat 10 лет назад #
Только что еще раз проверил:
- ввожу неверный пароль на морде (http://realauth.instantdemo.ru)
= "ошибка авторизации"
- перекидывает на http://realauth.instantdemo.ru/login, никакой капчи тут пока нет.
- ввожу тут верные логин пароль
= "Неверные логин или пароль:Неверно указан код на картинке!"
хотя логин и пароль были верны, а никакого кода не показывалось.
Крот 10 лет назад #
1) перекидывает на /auth/error.html адрес точно сейчас не помню - вот там то и выставляется признак капчи(странно да?)
2) потом заходим /login - а там мой плагин и не подозревает о "наглости" модуля
3) получаем результат: система ждет капчу - а компонент не показывает
решение - нужно еще дополнительно переделать модуль авторизации и все будет хорошо
Крот 10 лет назад #
Александр 10 лет назад #
Range 10 лет назад #