Безопасный вход в систему с использованием файлов cookie

StackOverflow https://stackoverflow.com/questions/1991477

Вопрос

Хранит имя пользователя & пароль пользователя в куки-файле — хорошая практика?Я действительно хочу знать, как большие веб-сайты любят (Фейсбук, дигг, твиттер) справиться с этим.Мой код такой:

<?php

$username = mysql_real_escape_string($_POST['username']);
$password = md5($_POST['password']);

?>

После каждого успешного входа в систему я сохраняю $username и $password (md5) в файле cookie.И восстановите идентификатор сеанса с помощью session_regenerate_id()


И для аутентификации пользователя я проверяю, существует ли сеанс входа в систему, в противном случае я аутентифицирую файлы cookie.

Есть идеи?Спасибо

Это было полезно?

Решение

Я немного запутался: вы используете сеансы PHP или файлы cookie?

Если вы храните данные в сеансе ($_SESSION['username'] = 'Tom' и т. д.), данные не сохраняются в файлах cookie пользователя.

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

autologins
----------
key (random hash)
user_id
expires

Другие советы

Просто md5 недостаточно, вы должны, по крайней мере, включить случайную «соль» (небольшую случайную строку символов), которую вы храните в своей базе данных.

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

Стандартная практика — предоставить пользователю идентификатор сеанса в файле cookie либо самостоятельно, либо с помощью сеансов PHP.Некоторые сайты по-прежнему сохраняют хэш имени пользователя и пароля в файле cookie, но я предпочитаю первое.Это позволяет вам предоставить пользователям больше контроля над своими логинами, чтобы они могли видеть, например, сколько у них сеансов и с какого они IP-адреса — хороший пример см. в GMail.

Что касается солей и хеширования, вам следует хранить хэши паролей в базе данных с солью.В идеале соль должна быть разной для каждого пользователя.В случае, если ваша база данных будет украдена или раскрыта, злоумышленнику будет НАМНОГО сложнее получить пароли (если бы все они использовали одну и ту же соль, они могли бы создать радужные таблицы для этой соли, что занимает много времени, но позволит они потом довольно быстро взламывают пароли).В целях безопасности соль также должна содержать некоторые небуквенно-цифровые символы, например %$&^.

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

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

Я подозреваю, что TWitter использует что-то подобное, поэтому вы можете постоянно войти в Twitter только с одного компьютера одновременно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top