Определен ли порт файлов cookie HTTP? - PullRequest
307 голосов
/ 23 октября 2009

У меня есть две HTTP-службы, работающие на одной машине. Я просто хочу знать, разделяют ли они свои куки или браузер различает два серверных сокета.

Ответы [ 8 ]

278 голосов
/ 02 мая 2013

Текущая спецификация cookie - RFC 6265 , которая заменяет RFC 2109 и RFC 2965 (оба RFC теперь помечены как "Исторические") и формализует синтаксис для реального использования файлов cookie. В нем четко говорится:

  1. Введение

...

По историческим причинам файлы cookie содержат ряд угроз для безопасности и конфиденциальности. Например, сервер может указать, что данный файл cookie предназначен для «безопасных» соединений, но атрибут Secure не обеспечивает целостность в присутствии активного сетевого злоумышленника. Аналогично, файлы cookie для данного хоста совместно используются всеми портами на этом хосте, хотя обычная «политика одного и того же источника», используемая веб-браузерами, изолирует контент, извлекаемый через разные порты.

А также:

8,5. Слабая конфиденциальность

Файлы cookie не обеспечивают изоляцию по порту . Если файл cookie доступен для чтения службой, работающей на одном порту, файл cookie также может быть прочитан службой, работающей на другом порту того же сервера. Если файл cookie доступен для записи службой на одном порту, файл cookie также доступен для записи службой, работающей на другом порту того же сервера. По этой причине серверам НЕ СЛЕДУЕТ запускать службы, не доверяющие друг другу, на разных портах одного и того же хоста и использовать файлы cookie для хранения конфиденциальной информации.

122 голосов
/ 18 ноября 2010

В соответствии с RFC2965 3.3.1 (за которыми могут или не могут следовать браузеры), если порт явно не указан в параметре port заголовка Set-Cookie, куки могут или могут не будет отправлено ни в один порт.

Справочник по безопасности браузера Google гласит: по умолчанию область действия cookie ограничена всеми URL-адресами текущего имени хоста и не привязана к информации о порте или протоколе. и некоторые строки позже Невозможно ограничить использование файлов cookie только одним DNS-именем [...] аналогично, невозможно ограничить их определенным портом. (Кроме того, имейте в виду, что IE не учитывает номера портов в политике одного источника на всех .)

Так что, похоже, здесь небезопасно полагаться на какое-либо четко определенное поведение.

61 голосов
/ 02 мая 2013

Это действительно старый вопрос, но я решил добавить обходной путь, который использовал.

У меня на ноутбуке работают две службы (одна на порту 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.

Опять же, никому нет до этого дела, но это было легко и полезно для моей ситуации.

19 голосов
/ 23 октября 2009

Это большая серая область в SOP cookie (та же политика происхождения).

Теоретически, вы можете указать номер порта в домене, и куки не будут переданы. На практике это не работает с несколькими браузерами, и вы столкнетесь с другими проблемами. Так что это возможно, только если ваши сайты не предназначены для широкой публики, и вы можете контролировать, какие браузеры использовать.

Лучшим подходом является получение 2 доменных имен для одного и того же IP-адреса без учета номеров портов для файлов cookie.

16 голосов
/ 20 сентября 2011

Альтернативный способ обойти проблему - сделать так, чтобы имя файла cookie сеанса было связано с портом. Например:

  • mysession8080 для сервера, работающего на порту 8080
  • mysession8000 для сервера, работающего на порту 8000

Ваш код может получить доступ к конфигурации веб-сервера, чтобы выяснить, какой порт использует ваш сервер, и соответствующим образом назвать cookie.

Имейте в виду, что ваше приложение получит оба куки, и вам нужно запросить тот, который соответствует вашему порту.

Нет необходимости указывать точный номер порта в имени файла cookie, но это более удобно.

Как правило, имя файла cookie может кодировать любой другой параметр, специфичный для используемого вами экземпляра сервера, поэтому его можно декодировать в правильном контексте.

9 голосов
/ 16 февраля 2012

В IE 8 файлы cookie (проверяются только на локальном хосте) распределяются между портами. В FF 10 их нет.

Я опубликовал этот ответ, чтобы у читателей был хотя бы один конкретный вариант для тестирования каждого сценария.

2 голосов
/ 21 августа 2013

У меня возникла похожая проблема при запуске (и попытке отладки) двух разных приложений 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

Проблема решена:)

1 голос
/ 23 октября 2009

Это необязательно.

Можно указать порт, чтобы куки могли быть привязаны к конкретному порту. В этом нет необходимости, об этом должен заботиться веб-сервер / приложение.

Источник: Статья в немецкой Википедии , RFC2109 , глава 4.3.1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...