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

Volodymyr Kostyrko c.kworr на gmail.com
Пт Янв 20 13:29:16 UTC 2012



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 возрастает.
====

-- 
Sphinx of black quartz judge my vow.



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