Как прочитать файл cookie HttpOnly с помощью JavaScript

90

Есть ли способ прочитать безопасный файл cookie с помощью JavaScript?
Я попытался сделать это с помощью document.cookieи, насколько я могу судить в этой статье о безопасных файлах cookie и флаге HttpOnly , я не могу получить доступ к безопасному файлу cookie таким образом.

Может ли кто-нибудь предложить обходной путь?

цам
источник
1
Из вики : безопасный файл cookie используется только тогда, когда браузер посещает сервер через HTTPS.
Pavel Hodek 09
6
@Pavel Hodek Это неправильный флаг. Флаг «безопасный» cookie не имеет ничего общего с флагом безопасности HTTPOnly. У них ужасная система именования.
ладья
1
Следует изменить заголовок этого вопроса, чтобы включить флаг «HttpOnly». В его нынешнем виде, похоже, речь идет о флаге "Безопасный".
Tom

Ответы:

126

Разные браузеры включают разные меры безопасности, когда установлен флаг HTTPOnly . Например, Opera и Safari не препятствуют записи javascript в cookie. Однако в последних версиях всех основных браузеров чтение всегда запрещено.

Но что еще более важно, почему вы хотите читать HTTPOnlycookie? Если вы разработчик, просто отключите флаг и обязательно протестируйте свой код для xss. Я рекомендую вам избегать отключения этого флага, если это вообще возможно. HTTPOnlyФлаг и «безопасный флаг» (который заставляет кук для отправки через HTTPS) всегда должны быть установлены.

Если вы злоумышленник , вы хотите захватить сеанс . Но есть простой способ перехватить сеанс, несмотря на HTTPOnlyфлаг. Вы все еще можете ездить на сеансе, не зная идентификатора сеанса. Червь MySpace Samy сделал именно это. Он использовал XHR для чтения токена CSRF, а затем для выполнения авторизованной задачи. Следовательно, злоумышленник может сделать практически все, что может сделать зарегистрированный пользователь.

Люди слишком сильно верят в HTTPOnlyфлаг, XSS все еще можно использовать. Вы должны установить барьеры вокруг чувствительных функций. Например, для смены пароля необходимо указать текущий пароль. Для возможности администратора создать новую учетную запись должна потребоваться капча, которая является методом предотвращения CSRF, который нельзя легко обойти с помощью XHR .

ладья
источник
Не могли бы вы подробнее рассказать о червячке? Эта ссылка не работает и тоже мало что понимает в Интернете. Спасибо.
Абхишек Джебарадж
@Abhishek Jebaraj Если вы не понимаете червя Sammy или токенов CSRF, попробуйте сначала понять ограничения политики одного и
ладья
Я хочу узнать дату истечения срока годности файла cookie только для http, как мне это сделать
PirateApp,
50

Суть файлов cookie HttpOnly в том, что к ним нельзя получить доступ с помощью JavaScript.

Единственный способ (за исключением использования ошибок браузера) для вашего сценария прочитать их - это иметь на сервере взаимодействующий сценарий, который будет считывать значение cookie и выводить его обратно как часть содержимого ответа. Но если вы можете и будете это делать, зачем вообще использовать файлы cookie HttpOnly?

Илмари Каронен
источник
Вы можете протестировать его, чтобы узнать, правильно ли пользовательский браузер обрабатывает HttpOnly для файлов cookie, прежде чем разрешить пользователю использовать ваш сайт из определенного браузера. Я ищу пример, который может гарантировать поддержку браузером флага HttpOnly. MS также советует это сделать, но дальнейших советов о том, как это сделать, нет: Уменьшение XSS с помощью HttpOnly
Урсегор
Я нашел, что они советуют белый список версии браузера. Я могу ошибаться, но разве это не удобный способ проверить поддержку javascript? Не могли бы вы посоветовать какие-нибудь уловки по этому поводу?
Урсегор
-7

Один из способов - использовать веб-инспектор Safari, и на вкладке хранилища вы можете увидеть все файлы cookie, httpOnly или нет, и просто выберите файл cookie Command + C, чтобы скопировать его.

Получив строку, вы можете легко проанализировать ее с помощью любого парсера файлов cookie или простого javascript.

введите описание изображения здесь

панкайдохарай
источник
1
FF и Chrome также могут это сделать. Это не то же самое, что хочет OP.
imba-tjd
@ imba-tjd Что ж, вы правы, но в то время я использовал Safari, поэтому могу просто поручиться за это.
pankajdoharey
Это похоже на то, как если бы вы отвечаете на вопрос «Как мне получить ввод пользователя?»: «Просто спросите его, а затем укажите это в своем коде».
forumulator