Как генерируются идентификаторы сеанса? - PullRequest
1 голос
/ 23 марта 2010

Большинство веб-приложений зависят от какого-либо сеанса с пользователем (например, для сохранения статуса входа в систему). Идентификатор сеанса хранится в виде файла cookie в браузере пользователя и отправляется с каждым запросом.

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

Вопрос - как эффективно генерировать идентификаторы сессии, которые являются редкими и уникальными?

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

РЕДАКТИРОВАТЬ:

  • Идентификаторы GUID считаются небезопасными с точки зрения безопасности (и случайности).
  • Основная проблема заключается в том, чтобы убедиться, что числа уникальны, то есть они не повторяются, и сделать его эффективным.

Ответы [ 2 ]

2 голосов
/ 23 марта 2010

Если вы хотите, чтобы они были уникальными и не легко угадывались, почему бы не объединить их?

Возьмите счетчик (генерирует уникальное значение для нового сеанса) и добавьте случайные биты, сгенерированные CSPRNG . Убедитесь, что вы получили минимальное число бит , необходимое для правильного ввода.

Это должно работать и на ферме без заминок: просто добавьте префикс локального к серверу счетчика с уникальным идентификатором этого сервера.

SSSSCCCCCRRRRRR

Где S - идентификатор сервера, который создал сеанс, C - локальный счетчик сервера, а R - случайное шифрование.

(Отказ от ответственности: количество букв не соответствует количеству цифр / бит, которые вы должны использовать каким-либо образом.:)

Уникальный, безопасный.

0 голосов
/ 23 марта 2010

Вы можете взглянуть на RNGCryptoServiceProvider, если вы используете .NET.

http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=775

Это криптографически безопасный способ генерации случайных чисел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...