Почему сеанс CherryPy не требует секретного ключа? - PullRequest
7 голосов
/ 16 июля 2011

Я заметил, что сессия cherrypy не требует настройки секретного ключа. Напротив, сессия пилонов делает: http://docs.pylonsproject.org/projects/pylons_framework/dev/sessions.html

Меня беспокоит проблема безопасности, если я использую сеанс для запоминания аутентификации пользователя.

Кто-нибудь может объяснить, почему для сессии cherrypy не нужен секретный ключ? Или есть какие-то предложения, как сделать так, чтобы сеанс запоминал имя пользователя, чтобы он был безопасным?

1 Ответ

18 голосов
/ 15 августа 2011

Существует два основных способа поддержания состояния сеанса: на сервере или на клиенте.

При использовании серверного подхода вы сохраняете данные сеанса в файлах, базе данных или в памяти на сервере и назначаете им идентификатор. Этот идентификатор сеанса затем отправляется клиенту и обычно сохраняется в файле cookie (хотя они также могут быть встроены в URL-адреса). Затем с каждым запросом идентификатор сеанса клиента считывается и используется веб-приложением для загрузки данных сеанса, где бы они ни хранились на сервере. Таким образом, клиент никогда не имеет доступа к каким-либо данным сеанса и не может их подделать, но недостатком является то, что вы должны защищать от перехвата сеанса с помощью устаревших идентификаторов сеансов вредоносными клиентами. Это модель, используемая сегодня большинством веб-фреймворков и приложений.

Другой подход заключается в полном хранении данных сеанса на стороне клиента внутри файлов cookie. Недостатком этого подхода является то, что данные могут быть просмотрены и подделаны клиентом, поэтому вы должны позаботиться о том, чтобы правильно подписать и зашифровать данные, чтобы предотвратить подделку. Это где хороший секретный ключ вступает в игру. Плюс в том, что вам также не нужно беспокоиться об угоне сессии.

Pylons использует сеансы Beaker, которые можно настроить для полного хранения данных сеанса на стороне клиента . Вот почему вам нужен секретный ключ.

CherryPy только сохраняет данные сеанса на сервере, а затем отправляет пользователю файл cookie с идентификатором сеанса, поэтому клиент никогда не видит данные сеанса и не может их изменить. Вы можете настроить его для использования файлов или просто хранить все в памяти. Вы даже можете подключиться к нему и использовать базу данных для хранения данных сеанса.

Лично я предпочитаю подход, используемый CherryPy, так как это тот же подход, который используется большинством Интернета. Его легче защитить, и вы можете легко обмениваться данными сеанса с другими приложениями, работающими на вашем сервере, не беспокоясь о шифровании или ключах.

...