Представьте себе сценарий плохого случая, когда злоумышленник может настроить человека посередине, очевидно, для незащищенных соединений (HTTP: 80)
при первом соединении:
1- cliente request example.com
2- server respond 301 to httpS::/example.com
3- client request https://example.com
4- server send document and a secured cookie (GOOD-COOKIE)
5- client send next request with GOOD-COOKIE
6- server respond based on GOOD-COOKIE
(несколько дней спустя клиент снова подключается из того же браузера)
1- client request example.com
X- Attacker intercepts and send document with FAKE-COOKIE (same-name *) and 301 to https
X- client overwrite the GOOD-COOKIE with the FAKE-COOKIE
3- client request https://example.com with FAKE-COOKIE
4- server respond based on FAKE-COOKIE
. * ПРИМЕЧАНИЕ: cookie с тем же именем, даже не защищенный (другой флаг), передаваемый по http от злоумышленника
, в то время как безопасные куки не передаются по протоколу HTTP, на самом деле их можно перезаписать с помощью файла cookie с тем же именем, полученного из соединения, отличного от https: sad-very-sad-emoticon
ни безопасные, ни httpOnly флаги не решаютв этом вопросе, ни HSTS, ни ...
какая-либо тактика для решения этой проблемы?
(мы разрабатываем в файле node.js, поэтому не применяются ограничения apache / iis / etc ..)
Пример файла cookie для этого случая
GOOD-COOKIE (header response)
Set-Cookie: myCookie=myValueCookie; Secure; Path=/
FAKE-COOKIE (header attacker response) Changed from original that server sends
Set-Cookie: myCookie=myValueCookie; Path=/