Я делаю первый проход, выполняя свою собственную аутентификацию и сеансы в rails, и не уверен, что понимаю поддержку сеансов, которая присутствует. (Под первым проходом я имею в виду, что сначала я аутентифицируюсь через http, а не через https. Рабочий код будет использовать https.)
Мое понимание безопасных сеансов состоит в том, что вы передаете токен браузеру через cookie-файл через SSL, а затем сравниваете этот токен с токеном, хранящимся на сервере, чтобы выяснить, действительно ли это пользователь, которого вы считаете. Я надеялся, что вы, ребята, сможете проверить мое понимание безопасных сессий, а именно:
- Пользователь получает страницу входа и отправляет имя пользователя и пароль (POST через SSL).
- Сервер проверяет протокол и затем проверяет sha1 пароля (обычно + соль) по существующему хешу в БД. Если они совпадают, сгенерируйте идентификатор сеанса, поместите его как в (n SSL) cookie с идентификатором пользователя, так и в хранилище сеансов на стороне сервера. Перенаправить пользователя в защищенную область сайта.
- Этот идентификатор сеанса остается неизменным на протяжении всего сеанса пользователя, вошедшего в систему - или - сервер выдает новый идентификатор сеанса после каждой безопасной операции, отправляя его через файл cookie SSL и сохраняя новое значение в БД.
- Любые действия, которые включают в себя личные или защищенные данные, проверяют хранилище сеанса на наличие идентификатора сеанса для этого пользователя и, если он присутствует, сравнивают идентификатор сеанса cookie с хранилищем сеанса перед выполнением действия. Если мы чередуем идентификаторы сеансов, после действия введите новый идентификатор сеанса (файл cookie SSL и хранилище на стороне сервера).
- Пользователь выходит из системы, что говорит серверу удалить идентификатор сеанса из хранилища сеансов и очистить cookie. Или срок действия файла cookie истекает в браузере и / или на сервере, и требуется повторная проверка подлинности.
Есть ли явные ошибки в приведенном выше? Кроме того, похоже, что поддержка сеанса [] Rails не предотвратила бы атаки MITM, если бы токен в cookie был просто идентификатором сеанса. Это правильно?