Я прочитал много, много, много постов о том, что «вы, вероятно, храните пароли неправильно». Они всегда имеют в виду хранение паролей на сервере, на который входит пользователь; они в основном перефразируют (каламбур) повсеместно распространенные советы, такие как неукоснительное использование паролей и т. д. и т. д. Однако я никогда не видел статьи о передовых методах хранения паролей на клиенте, чтобы клиенту не приходилось входить в систему. вручную каждый раз, когда они хотят войти; функция "запомнить меня".
Многие программы имеют эту функцию, от браузеров до таких программ, как Dropbox.
Недавно я прочитал старую статью о том, как Dropbox хранит на вашем компьютере идентификатор, который вы можете просто скопировать / вставить на другой компьютер, запустить Dropbox и войти в систему как устройство, с которого вы получили идентификатор; нет логина, нет ничего, и полный доступ к учетной записи Dropbox. Это похоже на действительно глупый дизайн, но я не могу придумать лучшего способа сделать это.
Я даже не уверен, как избежать хранения чего-то вроде куки в виде обычного текста. Если вы шифруете его, где вы храните ключ для его расшифровки?
Единственный способ, которым я вижу, чтобы не вводить уязвимости безопасности, - это удалить функцию автологина и заставить пользователя вводить свой пароль каждый раз, когда он хочет использовать службу, но это проблема удобства использования, и пользователи не хотят этого делать.
Что можно прочитать о безопасном локальном хранении учетных данных для реализации функции автоматического входа? Если принципы слишком просты для всей статьи, каковы они? Рассматриваемое программное обеспечение не должно зависеть от функций, присутствующих не на всех платформах (как, например, «связка ключей» в некоторых дистрибутивах Linux).
Ответы:
Одним из способов является:
В зависимости от того, какую платформу вы используете для разработки своего сайта, это поведение может быть доступно как встроенная функция.
Обратите внимание, что, поскольку протокол HTTP в любом случае не имеет состояния, на самом деле нет никакой функциональной разницы между тем, чтобы кто-то вошел в систему во время одного сеанса использования веб-сайта, и "автоматическим входом в систему" при следующем использовании сайта; это зависит только от того, сколько времени вы дадите до истечения сеанса.
Обновление: также, очевидно, используйте HTTPS для повышения безопасности.
Обновление 2: обратите внимание, что этот подход имеет ограничения в том, что он плохо работает для пользователей, которые сильно меняют свой IP-адрес. Тем не менее, он обеспечивает повышенный уровень безопасности и может быть полезен в некоторых ситуациях.
источник
Amazon (и многие другие) используют гибридный подход. Они предоставляют автологин для просмотра, добавления товаров в корзину и размещения заказов с использованием комбинаций кредитных карт / адресов доставки, которые вы использовали ранее. Однако они требуют, чтобы вы вводили свой пароль для многих действий, таких как добавление кредитных карт, добавление / изменение адресов доставки, обновление паролей, просмотр прошлых заказов (необязательно для пользователя) и множество других настроек учетной записи.
Так что да, люди, которые получают доступ к вашему компьютеру, могут похитить ваш сеанс, но вы все равно получаете то, что они заказывают! (Что еще более важно, стимул захватить сеанс в значительной степени сведен на нет.) Но если у кого-то есть доступ к моему компьютеру, у меня больше проблем, чем у людей, которые крадут обычные сеансы сайта.
Если у вас есть части вашего приложения, которым не требуется такой высокий уровень безопасности, вы можете выбрать гибридную модель, в которой вы сохраняете идентификатор сеанса (хэшированный или любой другой, если хотите) для автоматического входа пользователей в разделы сайта с низким уровнем безопасности. , но требуют, чтобы они вводили пароль при входе в зоны более высокого уровня безопасности и удаляли маркер с высоким уровнем безопасности по окончании сеанса.
Конечно, если это сайт банковского уровня, автоматический вход в систему невозможен. Опять же, сайты, которые используют эти типы безопасности, принимают ценность данных, которые они защищают, и дополнительное удобство для пользователя взвешивает потенциальный риск взломанного сеанса. Если вы считаете, что это не относится к вашему приложению, не используйте автоматический вход в систему. Вам необходимо получить доступ к тому уровню компромиссов безопасности / юзабилити, который подходит для вашего варианта использования.
источник
На самом деле это не так сложно. Сначала сохраните куки в этом формате:
Вы можете использовать хэш sha1 для токена. Затем в вашем userID хранилища таблицы базы данных Remember_me_tokens, хеш токена bcrypt и время его создания.
Затем, когда кто-то посещает ваш сайт, проверьте, установлен ли файл cookie. Если файл cookie установлен, проверьте, есть ли в базе данных действительная строка в течение последних 7 дней. Если в базе данных есть допустимая строка для cookie, установите сеанс, чтобы указать, что пользователь вошел в систему, а также удалите соответствующую строку cookie / базы данных и сгенерируйте новую строку cookie / token / database.
Если они выйдут из системы, удалите куки.
Запустите задание cron, чтобы обрезать Remember_me_tokens старше 7 дней.
источник
Вы можете, только если вы доверяете устройству, где вы храните его. Это зависит от пользователя (если вы не можете повлиять на устройство), насколько оно безопасно. Это просто из ваших рук.
Как указано в комментариях:
источник