Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Безопасный сброс пароля на сайте 
V
    Опции темы
yngwie
Дата 23.4.2013, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 17.1.2008

Репутация: нет
Всего: нет



Подскажите как безопасно реализовать сброс пароля на сайте. На текущий момент у меня работает так:
    1. Пользователь запрашивает восстановление пароля
    2. Отправляем ему письмо с рандомным токеном 
    3. При переходе по ссылке проверяем токен и даем форму нового пароля
    4. Хешруем пароль, сохраняем его в базу и авторируем пользователя.

Что можно улучшить\добавить ?
PM MAIL   Вверх
s0lman
Дата 23.4.2013, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и лохматый
**


Профиль
Группа: Участник
Сообщений: 637
Регистрация: 1.11.2007
Где: Ukraine

Репутация: 9
Всего: 29



Обнуляем токен в базе, чтоб ссылка отработать могла только 1 раз
Выставить срок действия ссылки (24 часа, например)


--------------------
Когда я уже выучусь на волшебника? :(
PM   Вверх
yngwie
Дата 23.4.2013, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 17.1.2008

Репутация: нет
Всего: нет



Спасибо, а что будет если форму для ввода нового пароля откроет другой человек?
PM MAIL   Вверх
Sanchezzz
Дата 23.4.2013, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Цитата

Спасибо, а что будет если форму для ввода нового пароля откроет другой человек? 

Он сможет сменить пароль если токен еще не был использован и срок жизни еще не истек.
Токен работает до того момента пока пользователь не сменил пароль или срок жизни его не прошел.
s0lman, вроде хорошо объяснил.


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Arantir
Дата 23.4.2013, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 16
Всего: 55



Цитата(yngwie @  23.4.2013,  14:46 Найти цитируемый пост)
Спасибо, а что будет если форму для ввода нового пароля откроет другой человек? 

А что такое для сервера "другой человек"? Даже ваш компьютер не знает, что за ним сидите именно Вы...

Впрочем, вероятность угадать токен, на подобии "6GUI785dVBl0954fcHJNHFW690", по человеческим меркам равна нулю (для приведенного токена это 1 к 2.48*10^48).
Токен отправляется только на email владельца аккаунта. А за безопасность почтового ящика отвечаете уже не вы.

Уязвимость может быть в том случае, если токены не случайны, то есть есть взаимосвязь между последовательно генерируемыми сервером токенами (к примеру, вы генерируете их на основе текущей метки unix-времени). В идеале токены должны быть полностью независимы друг от друга, чтобы невозможно было предугадать следующий, даже имея сколь угодно большое количество предыдущих.


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
yngwie
Дата 24.4.2013, 06:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 17.1.2008

Репутация: нет
Всего: нет



Цитата(Arantir @  23.4.2013,  20:08 Найти цитируемый пост)
А что такое для сервера "другой человек"? Даже ваш компьютер не знает, что за ним сидите именно Вы...

Допустим мы отправили ссылку с токеном на указанный email, а этот чеговек не стал менять пароль по этой ссылке, а передал ее 3 лицу, которое перешло по этой ссылке и поменяло пароль. Может есть смысл записывать какой-либо параметр в сессию того человека, который запросил восстановление пароля, а потом кроме токена еще и проверять установлен ли параметр?

Цитата(Arantir @  23.4.2013,  20:08 Найти цитируемый пост)
В идеале токены должны быть полностью независимы друг от друга, чтобы невозможно было предугадать следующий, даже имея сколь угодно большое количество предыдущих

Подскажите как правильно сгенерировать такой токен?


Это сообщение отредактировал(а) yngwie - 24.4.2013, 06:46
PM MAIL   Вверх
Arantir
Дата 24.4.2013, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 16
Всего: 55



Цитата(yngwie @  24.4.2013,  05:45 Найти цитируемый пост)
Допустим мы отправили ссылку с токеном на указанный email, а этот чеговек не стал менять пароль по этой ссылке, а передал ее 3 лицу, которое перешло по этой ссылке и поменяло пароль.

И что? А если кто-то поменяет пароль, а потом передаст свой логин и пароль третьему лицу? Это невозможно предупредить физически. 
Разве что пользователь подтверждал регистрацию с помощью паспортных данных у Вас в офисе, как, например, при регистрации банковской карты или персонального аттестата webMoney. Но ведь в вашем случае это не так...


Цитата(yngwie @  24.4.2013,  05:45 Найти цитируемый пост)
Подскажите как правильно сгенерировать такой токен?

Создать массив из цифр, маленьких и больших букв. Сделать array_rand 30 раз (или любой другой желаемой длины токена). Проверить. нет ли сейчас такого активного токена (созданного, но еще не использованного пользователем).


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
yngwie
Дата 24.4.2013, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 17.1.2008

Репутация: нет
Всего: нет



Спасибо, а еще такой вопрос. Допустим мы приняли какой-то токен для сброса пароля (когда пользователь переходит по ссылке из письма). Далее мы просто ищем такой токен в базе:

Код

SELECT id FROM user WHERE reset_password_token = $_GET['token']


Этого достаточно или в WHERE нужно добавить какие-то еще условия?
P.S фильтрация пропущена для краткости.
PM MAIL   Вверх
ksnk
Дата 24.4.2013, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



yngwie Ситуации бывают разные.
  •  юзер забыл пароль, у него есть почтовый ящик.
  •  у юзера сломался напрочь почтовый ящик. Поможет привязка к телефону и sms, но это слишком сложно для большинства сайтов. Поможет служба "секретных ответов на вопросы", если юзер разрешил ее для себя. 
  •  юзер передает свой аккаунт чужому человеку. В этом случае он отдает имя-пароль и другой человек меняет e-mail и пароль на свой. Для игрушечных сайтов и "корпоративных" аккаунтов на саппорт-сайтах - достаточно распространенная практика.

Для токенов разумнее завести отдельную таблицу. Так как каждый токен имеет
  •  время жизни
  •  привязку к пользователю
  •  сопроводительную информация (кука, ip для параноиков).
Заводить отдельное поле для короткоживущих значений неразумно.
Цитата(yngwie @  24.4.2013,  09:32 Найти цитируемый пост)
Этого достаточно или в WHERE нужно добавить какие-то еще условия?

Время жизни токена пропущено.



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
s0lman
Дата 24.4.2013, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и лохматый
**


Профиль
Группа: Участник
Сообщений: 637
Регистрация: 1.11.2007
Где: Ukraine

Репутация: 9
Всего: 29



Цитата(ksnk @  24.4.2013,  09:06 Найти цитируемый пост)
Поможет привязка к телефону и sms, но это слишком сложно для большинства сайтов. 


Это почему? Сервисы смс-рассылок предоставляют нынче апи... Другое дело, сложно промотивировать пользователя ввести свой номер телефона  smile 



--------------------
Когда я уже выучусь на волшебника? :(
PM   Вверх
Sanchezzz
Дата 24.4.2013, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Да потому что денег это стоит 1 рубль. Поэтому сложно для того если сайт не приносит прибыли.


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
yngwie
Дата 24.4.2013, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 17.1.2008

Репутация: нет
Всего: нет



Цитата(ksnk @  24.4.2013,  10:06 Найти цитируемый пост)
yngwie Ситуации бывают разные.
 юзер забыл пароль, у него есть почтовый ящик.
 у юзера сломался напрочь почтовый ящик. Поможет привязка к телефону и sms, но это слишком сложно для большинства сайтов. Поможет служба "секретных ответов на вопросы", если юзер разрешил ее для себя. 
 юзер передает свой аккаунт чужому человеку. В этом случае он отдает имя-пароль и другой человек меняет e-mail и пароль на свой. Для игрушечных сайтов и "корпоративных" аккаунтов на саппорт-сайтах - достаточно распространенная практика.


У меня ситуация №1 (юзер забыл пароль, у него есть почтовый ящик)

Цитата(ksnk @  24.4.2013,  10:06 Найти цитируемый пост)
Время жизни токена пропущено.

Да прошу прощения. И все же, чтобы получить id пользователя для смены пароля мы ищем только токену и не истек ли он? Этого правда достаточно?


Это сообщение отредактировал(а) yngwie - 24.4.2013, 20:49
PM MAIL   Вверх
ksnk
Дата 25.4.2013, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(yngwie @  24.4.2013,  20:49 Найти цитируемый пост)
Этого правда достаточно?

Обычно - да. Служба восстановления паролей по почте так и работает.

А вообще, частности могут всю малину попортить  smile Вот представь, что ты спрашиваешь на форуме - "как повесить картину на стене?"  и "правда ли что для этого нужен молоток и гвоздь". По идее - да, а в частности, если стены бетонные, то понадобится ударная дрель и нормальное сверло по бетону + дюбель. Если стена из особопрочного бетона - понадобится уже не дрель, а перфоратор. Если стены из гипрока - понадобится специальная фиговина, чтобы стену не своротить.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
yngwie
Дата 25.4.2013, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 17.1.2008

Репутация: нет
Всего: нет



Цитата(ksnk @  25.4.2013,  10:23 Найти цитируемый пост)
Обычно - да. Служба восстановления паролей по почте так и работает.

Получается, что если я узнаю чей-либо токен, то я смогу поменять этому человеку пароль? Мне кажется эир не очень безопасно.

Цитата(ksnk @  25.4.2013,  10:23 Найти цитируемый пост)
А вообще, частности могут всю малину попортить   Вот представь, что ты спрашиваешь на форуме - "как повесить картину на стене?"  и "правда ли что для этого нужен молоток и гвоздь". По идее - да, а в частности, если стены бетонные, то понадобится ударная дрель и нормальное сверло по бетону + дюбель. Если стена из особопрочного бетона - понадобится уже не дрель, а перфоратор. Если стены из гипрока - понадобится специальная фиговина, чтобы стену не своротить. 

Мне казалось, что существуют общие рекомендации для надежной смены пароля

Это сообщение отредактировал(а) yngwie - 25.4.2013, 11:21
PM MAIL   Вверх
s0lman
Дата 25.4.2013, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и лохматый
**


Профиль
Группа: Участник
Сообщений: 637
Регистрация: 1.11.2007
Где: Ukraine

Репутация: 9
Всего: 29



Только остается проблема - узнать токен. 
Один из путей - узнать мыло юзера, взломать его и запросить смену пароля - только проблема ли в безопасностии сайта в данном случае?


--------------------
Когда я уже выучусь на волшебника? :(
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0931 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.