The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  вход/выход  слежка  RSS
"коллизия сессий PHP"
Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (PHP)
Изначальное сообщение [ Отслеживать ]

"коллизия сессий PHP"  +/
Сообщение от tester0 (ok) on 21-Ноя-16, 12:42 
Здравствуйте

имеется балансировщик с 6 бэкендами php-fpm  7.0
есть nginx c ip_hash

но вот незадача... если у клиента меняется IP он может попасть на другой backend
где с небольшой, но существующей вероятностью попадает в чужую сессию

ради эксперимента скопировал со всех бэкендов каталоги сессий и обнаружил
около 200 совпадений на ~ 50 000 сессий


для исправления ситуации были применены следующие настройки:

session.hash_bits_per_character = 6
session.hash_function = sha512

коллизий стало меньше, но в целом ситуация не решилась

кто как решает подобные задачи?

ps:  php 7.0  и обновление до 7.1 в дистрибутиве из официальных источников не предусмотрено :(

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "коллизия сессий PHP"  +/
Сообщение от PavelR (??) on 21-Ноя-16, 13:56 
> ps:  php 7.0  и обновление до 7.1 в дистрибутиве из
> официальных источников не предусмотрено :(

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

1) А что, в php-7.1 это как-то решено?
2) Если там это решено, то обычный путь - это собирать свои пакеты, пусть и на базе дистрибутивных правил сборки.
3) вы поддержали nginx inc финансово? Тогда там есть https://www.nginx.com/products/session-persistence/
4) Еще есть какие-то открытые подобные модули, как описано в https://habrahabr.ru/post/231523/

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "коллизия сессий PHP"  +/
Сообщение от tester0 (ok) on 21-Ноя-16, 14:53 
> 1) А что, в php-7.1 это как-то решено?

да, там появились

https://secure.php.net/manual/ru/session.configuration.php#i...
https://secure.php.net/manual/ru/session.configuration.php#i...

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "коллизия сессий PHP"  +/
Сообщение от Admin00ad on 23-Ноя-16, 17:54 
А точно генерится та длинна хэша сессии чтов настройках ? В 5 версии пхп модули сессий и хэша приходилось компилить жестко в бинарник пхп, модулем не работало.
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

4. "коллизия сессий PHP"  +/
Сообщение от tester0 (ok) on 23-Ноя-16, 17:59 
> А точно генерится та длинна хэша сессии чтов настройках ? В 5
> версии пхп модули сессий и хэша приходилось компилить жестко в бинарник
> пхп, модулем не работало.

да, хэши стали длиннее


может кто подскажет как по правильному общее хранилище сессий организовать?

попробовали в memcache,  работает -но будет ли гарантироваться там уникальность ключей...

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

6. "коллизия сессий PHP"  +/
Сообщение от PavelR (??) on 24-Ноя-16, 06:56 
>> А точно генерится та длинна хэша сессии чтов настройках ? В 5
>> версии пхп модули сессий и хэша приходилось компилить жестко в бинарник
>> пхп, модулем не работало.
> да, хэши стали длиннее
> может кто подскажет как по правильному общее хранилище сессий организовать?
> попробовали в memcache,  работает -но будет ли гарантироваться там уникальность ключей...

Хранилище хранит то, что в него положили.
По одному ключу может храниться только один набор данных.

Гарантировать _уникальность_ задачей _хранилища_ не является.

Два бэкенда всё так же могут сгенерировать два одинаковых ключа (второй перезапишет первый).

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

5. "коллизия сессий PHP"  +/
Сообщение от Sw00p_aka_Jerom (ok) on 24-Ноя-16, 02:14 
>около 200 совпадений на ~ 50 000 сессий

200 совпадений чего ? имен сессионных файлов ? это у вас клиенты некоторые у которых менялись айпишки передавали уже назначенный PHPSESSIONID и прыгали по бекандам, у sha512 коллизий на 50к итераций (если взять в качестве ключа микросекунды запроса) количество коллизий практически равны нулю.

пс:

http://www.acros.si/papers/session_fixation.pdf
session.use_strict_mode=On

можно ещё юзать централизованное хранилище вроде мемкешеда, либо базы.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру