Каков наиболее безопасный способ создания файлов cookie на основе «оставаться в системе»? - PullRequest
2 голосов
/ 11 ноября 2009

Какой самый безопасный способ использовать функцию «оставаться в системе»?

Я думаю, что, думая о пользовательских логинах, хранят их ID пользователя, метку времени и хэш timestamp + salt + hash of their pw в куки. затем, когда они зайдут на следующий сайт, проверьте, действительно ли хэш cookie timestamp + salt + hash of their pw

(то есть ... (не проверено и игнорируется отсутствие mysql_real_escape_string ())

(это в php)

 /*
 cookie contains these fields:
 username
 timestamp
 hash
 */

 $row  = mysql_fetch_array($result); 
            ## sql would be something like select salt,
            ## username from users where user = $_COOKIE['username']

 $generated_cookie_data = my_hash_func(
            $_COOKIE['timestamp'] . 
            $row['salt_from_db'] .
             my_hash_func([$row['password'])
             )

 if ($generated_cookie_data == $_COOKIE['hash']) {
 #logged in!
 }
 else {
 #not logged in!
 }

Ответы [ 4 ]

1 голос
/ 11 ноября 2009

Скорее всего, вы должны , а не сделать это самостоятельно - изобретать колесо будет плохо.Используйте все возможности управления сессиями, которые предоставляет ваша среда веб-программирования.Что, вы не используете фреймворк?Тогда ты злишься, и я желаю тебе удачи.

1 голос
/ 11 ноября 2009

Просто создайте длинный, чистый случайный и уникальный идентификатор. Не имеет значения, как, абсолютно не нужно основывать его на соли + пароль + IP, только он абсолютно не должен иметь шаблон (т.е. не использовать IP, метку времени и т. Д.). Иметь таблицу базы данных user_session со столбцами session_id (PK) и user_id (FK) (и при необходимости больше, например session_ttl, user_ip и т. Д.). Сгенерируйте идентификатор сеанса и проверьте, существует ли он в таблице. Если нет, то сохраните его вместе с идентификатором пользователя в таблице. Сохраняйте тот же идентификатор сеанса в долгоживущем cookie и проверяйте его при каждом новом запросе.

0 голосов
/ 11 ноября 2009

IMO, вы никогда не должны раскрывать информацию о пароле пользователя (даже хеш). Если кто-то получил доступ к этому хешу, он может пытаться угадать пароль пользователя столько раз, сколько ему захочется. Они не ограничены какими-либо механизмами безопасности, которые вам нужны для защиты учетных записей от случайного угадывания.

Если бы я использовал описанный вами подход, я бы, по крайней мере, создал бы случайное число, которое хранится в его базе данных вместо использования пароля.

0 голосов
/ 11 ноября 2009

Я думаю, вы должны включить IP-адрес в хэш. Таким образом, если другой пользователь каким-то образом украл файл cookie, у него не будет доступа к сеансу.

Более безопасный способ - генерировать случайный идентификатор каждый раз, когда пользователь входит в систему, и сохранять его в пользовательской таблице. Тогда хеш random + salt + password + ip.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...