Нет, не удаленно безопасно. У вас нет гарантии, что файлы cookie не хранятся в виде обычного текста (и на самом деле большинство реализаций делают хранят их в виде обычного текста).
Имейте в виду, что «запомнить меня» по своей сути небезопасно, поскольку любой, кто перехватывает файл cookie, получает доступ к приложению. Но раскрытие пароля пользователя делает его еще одним шагом вниз по лестнице незащищенности. :-) И, вероятно, действительно разозлит пользователя, если он узнает.
Я использую зашифрованную строку cookie, которая включает имя учетной записи пользователя в сочетании с токеном, который никак (иным образом) не связан с учетной записью пользователя, кроме как в таблице на моем сервере. Когда пользователь возвращается на сайт, мы расшифровываем файл cookie и проверяем, действительно ли этот токен связан с этой учетной записью. Токен (и, следовательно, файл cookie) изменяет каждый автоматический вход в систему и делает недействительным тот, который использовался для этого автоматического входа. (Между токенами и учетной записью существует отношение «многие к одному», позволяющее автоматически входить в систему из нескольких мест. Вы можете ограничить это, если хотите.) Срок действия токенов истекает, если они не используются в течение X дней. (Это делается не только путем ограничения продолжительности файла cookie, но и на стороне сервера.) Есть еще несколько вещей, которые я добавляю туда, чтобы немного усложнить жизнь тому, кто пытается расшифровать файл cookie (успешно расшифровав его) или использовать украденный файл cookie (который не требует расшифровки), но нет смысла перебарщивать (опять же, «запомнить меня» по своей сути небезопасно).
Я использую это на сайте, где надежная защита на самом деле не нужна (очевидно) и у которого есть большое количество клиентов с динамическим IP, поэтому я не пытаюсь заблокировать его по IP. Но даже привязка к IP-адресу не делает его безопасным, а просто немного уменьшает поверхность атаки.
Вам может быть интересно, почему у меня есть имя пользователя в файле cookie. Для прямых целей «запомнить меня» я бы не рекомендовал иметь его там, даже если он зашифрован (в конце концов, это половина пары аутентификации в системе имя пользователя + пароль). Я был немного удивлен, обнаружив это в нашем файле cookie, когда я посмотрел на формат, когда напомнил себе, как мы сделали это для этого вопроса; но затем я увидел комментарии, объясняющие, почему это там, и есть причины, не связанные с «помнить меня» (не обязательно убедительные причины, оглядываясь назад, но причины).
И последнее замечание: тот факт, что функция «запомнить меня» по своей сути небезопасна, является одной из многих причин, по которой журналы сайта очень важны, и почему вы должны требовать повторной проверки пароля в процессе изменения важной информации учетной записи (чтобы затруднить кто-то украл файл cookie, чтобы стать владельцем учетной записи).
person
T.J. Crowder
schedule
20.01.2010