httpOnly – это дополнительный флаг для HTTP-заголовка Set-Cookie, который указывает на запрет чтения/записи данных Cookie посредством JavaScript, отсюда и название: Cookie доступны только через протокол HTTP. Использование httpOnly позволяет веб-разработчикам установить собственную политику безопасности в отношении доступа к Cookie из среды браузера, что по замыслу разработчиков из Microsoft должно помочь в борьбе против XSS-уязвимостей. Однако обойти ограничения httpOnly довольно просто…
Впервые httpOnly был реализован в Internet Explorer 6 SP1 в далеком 2002 году. httpOnly прошел длинный путь, однако с тех времен спецификация практически не претерпела изменений. До сих пор не решена серьезная проблема, ставящая под сомнение безопасность данных Cookie с флагом httpOnly. Речь идет об Ajax и методе XMLHTTPResponse, с помощью которого можно получить доступ к Cookie, используя getAllResponseHeaders()/getResponseHeader(). Конечно некоторые меры были направлены на решение этой проблемы, в частности IE7 вырезает существующие Cookie с httpOnly из HTTP-заголовка Cookie, тем не менее пока что очень мало браузеров могут противостоять чтению из ответа заголовка Set-Cookie. Убедиться в этом, проверив свой браузер, можно здесь. Кстати среди самых популярных браузеров с httpOnly безопасно работает лишь Opera. Используемая мной Opera версии 9.52 вырезала из заголовков весь Set-Cookie, а вот FireFox 3.0.3 и Internet Explorer 7 показали HTTP-ответ как есть, без какой-либо обработки на предмет наличия Cookie с флагом httpOnly.
Другой проблемой является доступ к Cookie с httpOnly посредством метода TRACE. Напомню, что TRACE – это метод, предназначенный для отладки и анализа активности соединений. Отправив TRACE-запрос сервер возвратит посланные ему заголовки:
TRACE / HTTP/1.1 Host: foo.bar X-Header: test
HTTP/1.1 200 OK Date: Mon, 02 Dec 2002 19:24:51 GMT Server: Apache/2.0.40 (Unix) Content-Type: message/http TRACE / HTTP/1.1 Host: foo.bar X-Header: test
Как нетрудно догадаться, атакующий может получить доступ к безопасным кукам, отправив TRACE-запрос. Однако TRACE-запросы запрещены практически во всех современных браузерах – такой трюк работал только с IE6.
Таким образом, доверять защиту от XSS, лишь указывая флаг httpOnly, не стоит – лучше как следует позаботиться о безопасной фильтрации входных данных.
Ссылки:
Leave a Reply