Фон
Я опытный веб-разработчик (в основном с Python и CherryPy), который ранее реализовал безопасное управление сеансом, и теперь изучает Rails. Я изучаю поведение сеансов Rails, как показано в объекте session
, который доступен в контекстах экземпляра ActionController
.
Вопрос/проблема
Я прочитал, что в реализации Rails по умолчанию в Rails 4 используется зашифрованный и защищенный от несанкционированного доступа файл cookie. Прохладный, я предполагаю, что это означает, что я могу использовать его для хранения идентификатора пользователя для пользовательских сеансов, не беспокоясь о подделке сессии (защищенном от несанкционированного доступа) или о том, кто может узнать, что их идентификатор (зашифрован). Я хотел проверить это и посмотреть, какие рельсы будут делать, если файл cookie сеанса был изменен.
Итак, я пошел и изменил содержимое атрибута cookie сеанса с помощью надстройки браузера, и когда я перезагружу страницу с новым значением cookie, Rails просто счастливо дает мне разные новые значения для session_id
и _csrf_token
.
Что произошло с целостностью файлов cookie сессии?
Не должны ли рельсы обнаруживать (через подпись HMAC), что файл cookie был изменен, а затем расскажите мне об этом как-то?
Я боюсь, что мне не хватает чего-то неприлично очевидного, но мне не повезло найти ответ в Интернете, и исходный код тоже не дает его легко (я новичок в Рубин). Спасибо заранее.
Эксперимент
Я создал новое приложение и создал контроллер с действием index
:
$ rails new my_app
$ cd my_app; rails g controller home index
Затем я добавил эти две строки в файл app/views/layouts/application.html.erb:
<%= session.keys %><br/>
<%= session.values %>
Я запустил сервер dev и перешел на мой браузер на "localhost: 3000/home/index". Как и ожидалось, страница имеет следующие строки внизу:
["session_id", "_csrf_token"]
["8c1558cabe6c86cfb37d6191f2e03bf8", "S8i8/++8t6v8W8RMeyvnNu3Pjvj+KkMo2UEcm1oVVZg="]
Перезагрузка страницы дает мне одинаковые значения, хотя приложение устанавливает новое значение атрибута _my_app_session
cookie каждый раз. Мне это кажется странным, но я получаю одни и те же значения хэша сессии, поэтому я думаю, что это круто.
Затем я использовал надстройку редактирования файлов cookie для Chrome, чтобы изменить значение атрибута _my_app_session
cookie (заменив первый символ значения атрибута). Перезагрузка страницы показывает совершенно разные значения без каких-либо действий. WAT?