У меня есть два HTTP-сервиса, работающих на одной машине. Я просто хочу знать, если они делятся своими файлами cookie или обозреватель различает эти два серверных сокета.
Являются ли HTTP файлы cookie конкретными?
Ответ 1
Текущая спецификация cookie RFC 6265, которая заменяет RFC 2109 и RFC 2965 (оба RFC теперь отмечены как "Исторические" ) и формализуют синтаксис для использования файлов cookie в реальном мире. В нем четко сказано:
- Введение
...
По историческим причинам файлы cookie содержат ряд угроз безопасности и конфиденциальности. Например, сервер может указывать, что данный куки файл предназначен для "защищенных" соединений, но атрибут Secure не обеспечивает целостности в присутствии активного сетевого злоумышленника. Аналогично, файлы cookie для данного хоста совместно используются во всех портах этого хоста, хотя обычная политика "одного происхождения", используемая веб-браузерами, изолирует контент, полученный через разные порты.
А также:
8,5. Слабая конфиденциальность
Cookies не обеспечивают изоляцию портом. Если cookie можно прочитать службой, работающей на одном порту, cookie также читается службой, запущенной на другом порту того же сервера. Если файл cookie доступен для записи службой на одном порту, cookie также может быть доступен для записи службой, запущенной на другом порту того же сервера. По этой причине серверы НЕ ДОЛЖНЫ запускать взаимно недоверяющие службы на разных портах одного и того же хоста и использовать файлы cookie для хранения конфиденциальной информации о безопасности.
Ответ 2
В соответствии с RFC2965 3.3.1 (за которыми могут или не могут следовать браузеры), если порт явно не указан через port
в заголовке Set-Cookie
, файлы cookie могут быть отправлены или не отправлены на любой порт.
Google Руководство по безопасности браузера говорит: по умолчанию область cookie ограничена всеми URL-адресами текущего имени хоста - и не привязана к порту или протокола. и некоторые строки позже. Невозможно ограничить использование файлов cookie только для одного имени DNS [...], поэтому невозможно ограничить их конкретным портом. (Также имейте в виду, что IE не учитывает номера портов в своей политике с одним и тем же происхождением.)
Так что, похоже, небезопасно полагаться на любое четко определенное поведение здесь.
Ответ 3
Это действительно старый вопрос, но я думал, что добавлю обходной путь, который использовал.
У меня есть две службы, работающие на моем ноутбуке (один на порту 3000, а другой на 4000).
Когда я буду прыгать между (http://localhost:3000
и http://localhost:4000
), Chrome будет проходить в том же файле cookie, каждая служба не будет понимать cookie и сгенерировать новый.
Я обнаружил, что если я обратился к http://localhost:3000
и http://127.0.0.1:4000
, проблема исчезла, поскольку Chrome сохранил файл cookie для localhost и один для 127.0.0.1.
Опять же, никто не может заботиться об этом, но это было легко и полезно для моей ситуации.
Ответ 4
Это большая серая область в cookie SOP (политика одинакового происхождения).
Теоретически вы можете указать номер порта в домене, и cookie не будет использоваться совместно. На практике это не работает с несколькими браузерами, и вы столкнетесь с другими проблемами. Таким образом, это возможно только в том случае, если ваши сайты не являются общедоступными, и вы можете контролировать, какие браузеры использовать.
Лучший подход - получить 2 доменных имени для одного и того же IP-адреса и не полагаться на номера портов для файлов cookie.
Ответ 5
Альтернативный способ решения проблемы состоит в том, чтобы сделать имя файла cookie сеанса связанным с портом. Например:
- mysession8080 для сервера, работающего на порту 8080
- mysession8000 для сервера, работающего на порту 8000
Ваш код может получить доступ к конфигурации веб-сервера, чтобы узнать, какой порт используется вашим сервером, и соответственно указать имя файла cookie.
Имейте в виду, что ваше приложение получит оба файла cookie, и вам нужно запросить тот, который соответствует вашему порту.
Нет необходимости иметь точный номер порта в имени файла cookie, но это более удобно.
В общем, имя файла cookie может кодировать любой другой параметр, специфичный для используемого экземпляра сервера, поэтому его можно декодировать по правильному контексту.
Ответ 6
В IE 8 файлы cookie (проверенные только на локальном хосте) распределяются между портами. В FF 10 они не являются.
Я опубликовал этот ответ, чтобы у читателей был хотя бы один конкретный вариант для тестирования каждого сценария.
Ответ 7
У меня возникла аналогичная проблема (и попытка отладки) двух разных приложений Django на одном компьютере.
Я запускал их с помощью следующих команд:
./manage.py runserver 8000
./manage.py runserver 8001
Когда я входил в первый, а затем во втором, я всегда выходил из первого и наоборот.
Я добавил это на мой /etc/hosts
127.0.0.1 app1
127.0.0.1 app2
Затем я запустил два приложения с этими командами:
./manage.py runserver app1:8000
./manage.py runserver app2:8001
Проблема решена:)
Ответ 8
Это необязательно.
Порт может быть указан, так что файлы cookie могут быть специфичными для порта. Это не обязательно, веб-сервер/приложение должно позаботиться об этом.
Источник: Статья в немецкой Википедии, RFC2109, глава 4.3.1