Создание идентификатора файла cookie сеанса входа в систему невозможно путем повторной его регенерации
Чтобы противодействовать краже файлов cookie сеанса входа в систему, сниффингу и т. Д., Я думал об этой схеме.
Я уже прочитал http://jaspan.com/improved_persistent_login_cookie_best_practice и я хочу сделать что-то менее сложное, возможно, и с точки зрения производительности, и что-то, что хорошо сочетается как с функциональностью " запомни меня", так и с обычным входом в сеанс.
после успешной регистрации добавьте session id
в user(:uid)
таблица и создать идентификатор cookie сеанса, например, d6c89ddba79b4f68be07bd874c5ff566
и сохраните его в браузере пользователя.
Когда пользователь посещает другую, ту же страницу, обновляет ее; другой id
будет создан и current id
в user(:uid)
таблица, cookie в браузере пользователя будет обновляться новым, делая старый бесполезным || недействительным.
Если наблюдатель пытается украсть cookie, будь то незащищенное соединение, например, веб-сайт, не принадлежащий https, он будет бесполезен при следующем посещении или обновлении пользователем.
Но... я уверен, что где-то есть изъян в этой логике. может ли наблюдатель создать своего рода технику искажения времени или сделать что-то локально, чтобы уничтожить преимущества такой схемы?
Сейчас на ум приходит одна проблема. Я думаю, что это будет возможная ситуация, когда наблюдатель крадет cookie, когда пользователь отключен или находится в режиме ожидания, тогда наблюдатель обновляет текущую страницу этим cookie или посещает другой. проблема в том, что теперь пользователь вышел из системы, когда наблюдатель полностью контролирует свою учетную запись, и поэтому может сменить пароль, если это не система, в которой изменение пароля подтверждается по электронной почте или путем вставки текущего пароля ранее.
это правильно? в таком случае, как можно реализовать эту схему, не внося, возможно, дополнительной сложности?
1 ответ
Да, это хороший способ предотвратить совместное использование сеанса:
сервер сгенерирует новый идентификатор сеанса для сохранения в cookie-файле каждый n запросов. Заголовок Set-Cookie будет отправлен только один раз, поэтому, если в один сеанс подключены два браузера, один из них будет использовать старый недопустимый сеанс
это правильно? в таком случае, как можно реализовать эту схему, не внося, возможно, дополнительной сложности?
Как вы говорите, вы можете заставить пользователя подтверждать свой пароль всякий раз, когда вызывается функция высокой безопасности, например, смена пароля. Вы также можете заставить систему подтвердить свой пароль для продолжения сеанса в случае обнаружения совместного использования сеанса (т.е. некоторые запросы были зарегистрированы с использованием старого идентификатора сеанса).