Насколько уникален идентификатор сеанса php? У меня сложилось впечатление от разных вещей, которые я читал, что я не должен полагаться на двух пользователей, которые никогда не получают такой же сеанс. Разве это не GUID?Насколько уникален идентификатор сеанса php
ответ
Session_id действительно можно продублировать, но вероятность очень низкая. Если у вас есть сайт с честным трафиком, это может произойти один раз в вашей жизни на веб-сайте и просто раздражает одного пользователя за один сеанс.
Этого не стоит заботиться, если вы не планируете создать сайт с очень высоким трафиком или услугу для банковской индустрии.
Нет, идентификатор сеанса не является идентификатором GUID, но два пользователя не должны получать одинаковый идентификатор сеанса, поскольку они хранятся на стороне сервера.
Я не нашел подтверждения об этом, но я верю, что php проверяет, существует ли идентификатор сеанса, прежде чем создавать его с этим идентификатором.
Проблемы, связанные с захватом сеанса, беспокоят людей, когда кто-то узнает идентификатор сеанса активного пользователя. Это можно предотвратить во многих отношениях, для получения дополнительной информации об этом вы можете увидеть this page на php.net и this paper on session fixation
... но если вы всего лишь один сервер php в банке нескольких, нет никакой гарантии, что у сервера достаточно знаний, чтобы знать, был ли еще использован sesssionID. – djsadinoff 2008-09-26 11:03:26
Да, это очень хороший момент. – 2008-09-26 11:06:02
Вы можете установить альтернативную функцию генерации хеширования, если вы хотите настроить способ генерации идентификатора (это 128 бит номер, сгенерированный по MD5 по умолчанию). См. http://www.php.net/manual/en/session.configuration.php#ini.session.hash-function
Для получения дополнительной информации о сессиях PHP попробуйте эту отличную статью http://shiflett.org/articles/the-truth-about-sessions, которая также ссылается на другие статьи о фиксации сессии и уклоне.
Это не очень уникальный товар. В конфигурации по умолчанию это результат хэша различных вещей, включая результат gettimeofday (который не является ужасно уникальным), но если вы беспокоитесь, вы должны настроить его для привлечения некоторой энтропии из/dev/urandom, например
ini_set("session.entropy_file", "/dev/urandom");
ini_set("session.entropy_length", "512");
поиск «php_session_create_id» в the code для фактического алгоритма они используют.
Отредактировано для добавления: Существует генератор случайных чисел DFA, засеянный pid, смешанный со временем в usec. Это не твердое условие уникальности especially from a security perspective. Используйте конфигурацию энтропии выше.
Update:
По PHP 5.4.0 session.entropy_file по умолчанию в/DEV/urandom или /DEV/arandom, если он доступен. В PHP 5.3.0 эта директива остается пустым по умолчанию. PHP Manual
Размер session_id
Предположим, что seesion_id равномерно распределены и имеет размер = 128 бит. Предположим, что каждый человек на планете регистрируется один раз в день с постоянной сессией в течение 1000 лет.
num_sesion_ids = 1000*365.25 *7*10**9 < 2**36
collission_prob < 1 - (1-1/2**82)**(2**36) ≈ 1 - e**-(1/2**46)
≈ 1/2**46
Таким образом, вероятность одного или нескольких столкновений меньше одного на 70 тысяч миллиардов. Следовательно, размер session_id размером 128 бит должен быть достаточно большим. Как упоминалось в других комментариях, session_manager может также проверить, что новый session_id еще не существует.
Случайность
Поэтому большой вопрос, я думаю, является ли session_id: s генерируются с хорошей псевдо случайности. На этом вы никогда не можете быть уверены, но я бы рекомендовал использовать хорошо известное и часто используемое стандартное решение для этой цели (как вы, вероятно, уже сделали).
Даже если избежать столкновений из-за проверки, случайности и размера session_id важно, так что хакеры не могут, как-то делать квалифицированные угадывания и находить активные session_id: s с большой вероятностью.
Если вы хотите узнать, как PHP генерирует идентификатор сеанса по умолчанию, проверьте исходный код на Github. Это, конечно, не случаен и основан на хэш (по умолчанию: md5) этих ингредиентов (см строка 310 из фрагмента кода):
- IP-адрес клиента
- Текущее время
- РНР линейного генератор конгруэнтность - псевдо генератор случайных чисел (ПСЧ)
- ОС конкретной случайный источник - если операционная система имеет случайный источник доступный (например,/DEV/urandom)
Если ОС имеет случайный источник доступный, то сила генерируемого ID с целью того, чтобы быть идентификатором сеанса является высоким (/DEV/urandom и другого OS случайных источники (обычно) криптографический безопасный PRNGs) , Если, однако, это не удовлетворительно.
Цель с генерацией идентификации сеанса заключается в следующем:
- минимизировать вероятность генерирования двух идентификаторов сеанса с тем же значением
- делает его очень сложными в вычислительном отношении, чтобы генерировать случайные ключи и ударила по прибытию использование один.
Это достигается подходом PHP к генерации сеансов.
Вы не можете абсолютно гарантировать уникальность, но вероятности настолько низки, что ударяют один и тот же хэш дважды, что, вообще говоря, не стоит беспокоиться.
- 1. Насколько уникален идентификатор сеанса в Laravel?
- 2. Насколько уникален HttpSession.getId()?
- 3. Идентификатор сеанса ASP.NET - уникален для разных серверов
- 4. Насколько уникален LINQ?
- 5. Насколько уникален UUID?
- 6. Насколько уникален XAML?
- 7. Насколько безопасны переменные сеанса PHP?
- 8. Насколько безопасны переменные сеанса php
- 9. Идентификатор Zend_Auth_Adapter_DbTable не уникален
- 10. Идентификатор ресурсов basecamp уникален?
- 11. неожиданный идентификатор сеанса php
- 12. Идентификатор сеанса PHP изменяется?
- 13. PHP переименованием идентификатор сеанса
- 14. PHP: недопустимый идентификатор сеанса
- 15. PHP + cURL + идентификатор сеанса
- 16. Насколько уникален/dev/serial/by-id
- 17. Насколько уникален столбец _ID в Android MediaStore?
- 18. Как определить, уникален ли идентификатор?
- 19. java.sql.SQLException: идентификатор столбца не уникален
- 20. Идентификатор сеанса между php-страницами
- 21. Идентификатор сеанса php без изменений
- 22. PHP Regexp заголовок (идентификатор сеанса)
- 23. Что такое идентификатор сеанса? в php - идентификатор сеанса, определенный каждому пользователю или каждому обозревателю
- 24. Насколько уникален идентификатор регистрации GCM для Android-приложения с несколькими учетными записями?
- 25. Как узнать, уникален ли идентификатор экземпляра устройства?
- 26. - уникальный идентификатор группы, уникален для нескольких доменов.
- 27. Мне нужно проверить, что идентификатор сотрудника уникален
- 28. Почему идентификатор индекса Casbah/MongoDB не уникален?
- 29. Если идентификатор зеркала уникален в maven
- 30. Фрагмент - замените контейнер, если идентификатор не уникален
Могу ли я спросить, почему я проголосовал? – gizmo 2008-09-26 11:08:01
Возможно, потому что хранилище на стороне сервера никоим образом не гарантирует уникальность. Уникальность - это одно - если есть столкновение, оно будет сталкиваться независимо от того, где хранится сессия. – 2008-09-26 11:29:50
Не я, я ценю ваш ответ (как и другие). - Jalov – Jalov 2008-09-26 11:32:45