Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Найдена уязвимость функционала «remember me» в Laravel

Anna | 29.05.2014 | нет комментариев

Некоторое время назад был опубликован пост с подробным изложением уязвимости функционала «remember me» в фреймворке Laravel. Она разрешала имперсонировать всякого пользователя путем создания фальшивого кука логина. Разработчики тогда сказали что дыру закрыли. Но больше подробнейший взор показывает что гидре отрубали лишь одну голову. Даже если вы не используете данный фреймворк вам все равно будет пригодно узнать как не нужно имплементировать такой функционал у себя на сайте.

Основной задачей является то что токен авторизации в Laravel являет собой легко зашифрованный id пользователя. Отчего это нехорошо? Во-первых если украсть либо подобрать ключ применяемый для шифровки дозволено залогиниться под любым пользователем, при этом не придется подбирать его пароль. Безусловно получить такой ключ довольно сложно, но вот скажем незадолго найденная уязвимость OpenSSL Hartbleed дозволила бы это сделать. Но это не основная задача.

Что будет если кто-то украдет ваш куки?

Реально ваш аккаунт теснее украден навечно и вы ничего не можете с этим сделать. От того что это легко ваш id, то такой куки нет срока годности, с ним дозволено будет зайти даже через год и даже если вы поменяете пароль. Это открывает захватчику еще одну дверь: если он некогда подобрал ваш пароль, залогинился а после этого сберег куки себе, то смена пароля вам вновь таки теснее не поможет. Давайте добавим сюда то, что перехватить ваши пакети когда вы пользуетесь открытым WIFI ( скажем в Макдональдс ) дюже и дюже легко.

Если не ID, то что?

Есть много вариантов как сделать remember_me безвредно, все они нуждаются в каком-то уникальном рандомном токене, скажем:

1) Создаем табличку в которой сберегаем: user_id, token, expires_on, ip
2) При логине с включенным «remember me» создаем новейший беспричинный токен, записываем IP пользователя а также задаем срок годности токена.
3) Когда пользователь приходит с токеном, мы проверяем его валидность по табличке
4) Логиним пользователя
5) Удаляем ветхий токен
6) Создаем новейший токен как в пункте 2 и отдаем его пользователю

От того что токен всецело рандомный подобрать его реально нереально. Украсть его гораздо сложнее, так как применять его дозволено только один раз. Как добавочный бонус у нас есть привязка к IP пользователя. Кому увлекательна подробная имплементация советую прочитать пост на stackoverflow в котором детально описана каждая процедура авторизации пользователя. Я навел упрощенный пример тут для того Дабы в контрасте показать насколько прост подход Laravel.

Этика: невозможно доверять безопасность своего приложения фреймворку и верить что все сдалали за вас. Кстати создатель фреймворка дюже нехорошо воспринял критику своего подхода и продемонстрировал полное недопонимание подхода с токенами.

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB