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

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


Hi all.

В документации модуля отсутствует описание userid_mark:

синтаксис:	userid_mark off | [a-z0-9=];
умолчание:	off
контекст:	http, server, location
Директива задаёт первый символ хвоста base64 представления куки. По 
умолчанию хвост base64 - '=='. "userid_mark A" выдаёт куки,
оканчивающиеся на "A=". При этом он перевыдаёт все принятые куки,
у которых хвост не такой. Это можно использовать чтобы добавить или 
поменять P3P или expires.

Второе. По идее userid должен уникально идентифицировать каждого 
пользователя без возможности узнать а кто ещё сейчас чего. На самом деле 
выдаваемые куки различаются буквально парой байтов.

[green] ~> fetch -vvvs http://test/
scheme:   [http]
user:     []
password: []
host:     [test]
port:     [0]
document: [/]
---> test:80
looking up test
connecting to test:80
requesting http://test/
 >>> HEAD / HTTP/1.1
 >>> Host: test
 >>> User-Agent: fetch libfetch/2.0
 >>> Connection: close
 >>>
<<< HTTP/1.1 200 OK
<<< Server: nginx/1.0.11
<<< Date: Fri, 20 Jan 2012 11:04:18 GMT
<<< Content-Type: application/json
<<< Connection: close
<<< Set-Cookie: uid=wKgIPE8ZSjKvoyMQAwNkAg==; expires=Sat, 19-Jan-13 
11:04:18 GMT; path=/
<<< P3P: policyref="/w3c/p3p.xml", CP="NOI CUR ADM PSA OUR STP STA"
<<<
offset 0, length -1, size -1, clength -1
Unknown
[green] ~> fetch -vvvs http://test/
scheme:   [http]
user:     []
password: []
host:     [test]
port:     [0]
document: [/]
---> test:80
looking up test
connecting to test:80
requesting http://test/
 >>> HEAD / HTTP/1.1
 >>> Host: test
 >>> User-Agent: fetch libfetch/2.0
 >>> Connection: close
 >>>
<<< 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

Т.е. зная во сколько пользователь подключался к сайту можно 
приблизительно угадать какая у него будет создана сессия. Ну и 
соответственно в неё вклиниться. Можно вообще мониторить сайт на предмет 
авторизированных пользователей.

-- 
Sphinx of black quartz judge my vow.



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