Re: ngx_http_userid_module - неточности документации, cookie предсказуем

Igor Sysoev igor на sysoev.ru
Пт Янв 20 13:39:37 UTC 2012


On Fri, Jan 20, 2012 at 03:29:16PM +0200, Volodymyr Kostyrko wrote:
> 
> Anton Yuzhaninov wrote:
> > On 01/20/12 16:29, Volodymyr Kostyrko wrote:
> >> <<< HTTP/1.1 200 OK <<< Server: nginx/1.0.11 <<< Date: Fri, 20 Jan
> >> 2012 11:04:19 GMT <<< Content-Type: application/json <<<
> >> Connection: close <<< Set-Cookie: uid=wKgIPE8ZSjOvoyMQAwNlAg==;
> >> expires=Sat, 19-Jan-13 11:04:19 GMT; path=/ <<< P3P:
> >> policyref="/w3c/p3p.xml", CP="NOI CUR ADM PSA OUR STP STA" <<<
> >> offset 0, length -1, size -1, clength -1 Unknown
> >>
> >> Т.е. зная во сколько пользователь подключался к сайту можно
> >> приблизительно угадать какая у него будет создана сессия. Ну и
> >> соответственно в неё вклиниться. Можно вообще мониторить сайт на
> >> предмет авторизированных пользователей.
> >
> > модуль userid создавался совсем не для сессий, и uid использовать как
> >  session id плохая идея.
> >
> > В любом случае в этом модуле нет механизма проверки сессий, так что
> > непонятно зачем вообще нужно использовать uid в качестве session id.
> 
> Ладно, тут я прогнал насчёт сессий. Но факт в том что куки могут
> свободно повторяться, а это уже совсем не похоже на поведение mod_uid.
> Вот например из доки на mod_uid от апача:
> 
> ====
> Почему не mod_usertrack из поставки Apache
> 
> Потому что у него есть несколько недостатков:
> нет гарантий, что двум пользователям не будет выдана одинаковая cookie,
> хотя конечно включение getpid(), remote_ip и времени до миллисекунд
> сводит эту вероятность к минимуму
> нет поддержки многосерверной работы - а в этом случае возможность выдачи
> одинаковой cookie возрастает
> в логе хочется иметь возможность видеть и выданную пользователю cookie,
> причем видеть ее отдельно, mod_usertrack их перемешивает.
> Хочется иметь "номер сервиса" (см. выше) - чтобы понимать на какой из
> наших сервисов пользователь зашел при первом своем визите.
> ====
> 
> Может лучше добавить в  документацию хотя-бы короткое описание поведения
> модуля чтобы его не путали по функционалу с mod_uid. Вроде:
> 
> ====
> Модуль ngx_http_userid_module выдаёт сookies для идентификации клиентов.
> Для записи в лог можно использовать переменные $uid_got и $uid_set.
> Модуль совместим с модулем mod_uid для Apache, хотя в отличии от mod_uid
> нет гарантии что двум пользователям не будет выдана одинаковая cookie и 
> нет поддержки многосерверной работы - а в этом случае возможность выдачи
> одинаковой cookie возрастает.
> ====

ngx_http_userid_module формирует куку так же, как mod_uid (за исключением
баги c network order в ngx_http_userid_module) плюс к номеру процесса
добавляются младшие биты микросекунд во время старта процесса.


-- 
Igor Sysoev



Подробная информация о списке рассылки nginx-ru