В частности, я написал приложение на Rails, в котором я использую хранилище сессий по умолчанию (в Rails 2.3.5) CookieStore
, и я обнаружил странную проблему в разработке.
Сам инесколько других пользовались сайтом в течение нескольких недель, и у каждого из нас был логин, основанный на имени пользователя и пароле (каждый пользователь регистрировал себя, и я сохранял (соленые и хэшированные) данные в базе данных).Я хранил идентификатор пользователя в объекте Rails session
(и, следовательно, в файле cookie, который передается взад-вперед между браузером и сервером).
Один важный момент здесь: поскольку это сайт интрасетиЯ установил cookie-файлы на срок до 2 недель, чтобы пользователям не приходилось постоянно входить в систему.
Сегодня я перезагружаю базу данных, стирая все пользовательские записи (и все остальные данные намеренно).Несколько пользователей начали регистрироваться снова, а затем один пользователь обнаружил, что в первый раз, когда они заходили на сайт после автоматической очистки, они автоматически вошли в систему как другой пользователь!
Я думаю, я понимаю, почему это произошло:идентификатор пользователя, переданный из браузера этого пользователя на сервер, теперь соответствует другой записи пользователя в моей базе данных.Моей первоначальной мыслью было: «О, дорогой, я этого не ожидал!»но чем больше я думал об этом, тем больше осознавал, что это, вероятно, ожидаемое поведение.
Я понимаю, что могу изменить свое приложение на Rails на пользователя ActiveRecordStore
, но перед этим я хотел убедиться, что понимаю, что происходитЗдесь.В частности, действительно ли сочетание использования CookieStore
сеансов и их сохранения в течение некоторого времени действительно создает такую зияющую дыру в безопасности?Или я что-то упустил?Должен ли session_id
обеспечивать здесь немного больше безопасности?