![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
yngwie |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 17.1.2008 Репутация: нет Всего: нет |
Подскажите как безопасно реализовать сброс пароля на сайте. На текущий момент у меня работает так:
2. Отправляем ему письмо с рандомным токеном 3. При переходе по ссылке проверяем токен и даем форму нового пароля 4. Хешруем пароль, сохраняем его в базу и авторируем пользователя. Что можно улучшить\добавить ? |
|||
|
||||
s0lman |
|
|||
![]() Белый и лохматый ![]() ![]() Профиль Группа: Участник Сообщений: 637 Регистрация: 1.11.2007 Где: Ukraine Репутация: 9 Всего: 29 |
Обнуляем токен в базе, чтоб ссылка отработать могла только 1 раз
Выставить срок действия ссылки (24 часа, например) -------------------- Когда я уже выучусь на волшебника? :( |
|||
|
||||
yngwie |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 17.1.2008 Репутация: нет Всего: нет |
Спасибо, а что будет если форму для ввода нового пароля откроет другой человек?
|
|||
|
||||
Sanchezzz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 41 Всего: 60 |
Он сможет сменить пароль если токен еще не был использован и срок жизни еще не истек. Токен работает до того момента пока пользователь не сменил пароль или срок жизни его не прошел. s0lman, вроде хорошо объяснил. -------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
|||
|
||||
Arantir |
|
|||
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
А что такое для сервера "другой человек"? Даже ваш компьютер не знает, что за ним сидите именно Вы... Впрочем, вероятность угадать токен, на подобии "6GUI785dVBl0954fcHJNHFW690", по человеческим меркам равна нулю (для приведенного токена это 1 к 2.48*10^48). Токен отправляется только на email владельца аккаунта. А за безопасность почтового ящика отвечаете уже не вы. Уязвимость может быть в том случае, если токены не случайны, то есть есть взаимосвязь между последовательно генерируемыми сервером токенами (к примеру, вы генерируете их на основе текущей метки unix-времени). В идеале токены должны быть полностью независимы друг от друга, чтобы невозможно было предугадать следующий, даже имея сколь угодно большое количество предыдущих. -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
yngwie |
|
||||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 17.1.2008 Репутация: нет Всего: нет |
Допустим мы отправили ссылку с токеном на указанный email, а этот чеговек не стал менять пароль по этой ссылке, а передал ее 3 лицу, которое перешло по этой ссылке и поменяло пароль. Может есть смысл записывать какой-либо параметр в сессию того человека, который запросил восстановление пароля, а потом кроме токена еще и проверять установлен ли параметр?
Подскажите как правильно сгенерировать такой токен? Это сообщение отредактировал(а) yngwie - 24.4.2013, 06:46 |
||||
|
|||||
Arantir |
|
|||
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
И что? А если кто-то поменяет пароль, а потом передаст свой логин и пароль третьему лицу? Это невозможно предупредить физически. Разве что пользователь подтверждал регистрацию с помощью паспортных данных у Вас в офисе, как, например, при регистрации банковской карты или персонального аттестата webMoney. Но ведь в вашем случае это не так... Создать массив из цифр, маленьких и больших букв. Сделать array_rand 30 раз (или любой другой желаемой длины токена). Проверить. нет ли сейчас такого активного токена (созданного, но еще не использованного пользователем). -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
yngwie |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 17.1.2008 Репутация: нет Всего: нет |
Спасибо, а еще такой вопрос. Допустим мы приняли какой-то токен для сброса пароля (когда пользователь переходит по ссылке из письма). Далее мы просто ищем такой токен в базе:
Этого достаточно или в WHERE нужно добавить какие-то еще условия? P.S фильтрация пропущена для краткости. |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
yngwie Ситуации бывают разные.
Для токенов разумнее завести отдельную таблицу. Так как каждый токен имеет
Время жизни токена пропущено. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
s0lman |
|
|||
![]() Белый и лохматый ![]() ![]() Профиль Группа: Участник Сообщений: 637 Регистрация: 1.11.2007 Где: Ukraine Репутация: 9 Всего: 29 |
Это почему? Сервисы смс-рассылок предоставляют нынче апи... Другое дело, сложно промотивировать пользователя ввести свой номер телефона ![]() -------------------- Когда я уже выучусь на волшебника? :( |
|||
|
||||
Sanchezzz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 41 Всего: 60 |
Да потому что денег это стоит 1 рубль. Поэтому сложно для того если сайт не приносит прибыли.
-------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
|||
|
||||
yngwie |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 17.1.2008 Репутация: нет Всего: нет |
У меня ситуация №1 (юзер забыл пароль, у него есть почтовый ящик) Да прошу прощения. И все же, чтобы получить id пользователя для смены пароля мы ищем только токену и не истек ли он? Этого правда достаточно? Это сообщение отредактировал(а) yngwie - 24.4.2013, 20:49 |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Обычно - да. Служба восстановления паролей по почте так и работает. А вообще, частности могут всю малину попортить ![]() -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
yngwie |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 17.1.2008 Репутация: нет Всего: нет |
Получается, что если я узнаю чей-либо токен, то я смогу поменять этому человеку пароль? Мне кажется эир не очень безопасно. Мне казалось, что существуют общие рекомендации для надежной смены пароля Это сообщение отредактировал(а) yngwie - 25.4.2013, 11:21 |
|||
|
||||
s0lman |
|
|||
![]() Белый и лохматый ![]() ![]() Профиль Группа: Участник Сообщений: 637 Регистрация: 1.11.2007 Где: Ukraine Репутация: 9 Всего: 29 |
Только остается проблема - узнать токен.
Один из путей - узнать мыло юзера, взломать его и запросить смену пароля - только проблема ли в безопасностии сайта в данном случае? -------------------- Когда я уже выучусь на волшебника? :( |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |