Является ли порт http cookies специфичным?



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

618   8  

8 ответов:

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

  1. введение

...

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

а также:

8.5. Слабая Конфиденциальность

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

по данным RFC2965 3.3.1 (который может или не может сопровождаться браузерами), если порт явно не указан через на Set-Cookie заголовок, cookie-файлы могут или не могут быть отправлены в любой порт.

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

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

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

у меня есть две службы, работающие на моем ноутбуке (один на порту 3000, а другой на 4000). Когда я буду прыгать между (http://localhost:3000 и http://localhost:4000), Chrome будет передавать один и тот же файл cookie, каждая служба не будет понимать файл cookie и генерировать новый.

я обнаружил, что если я получил доступ к http://localhost:3000 и http://127.0.0.1:4000, проблема ушла, так как Chrome сохранил куки для localhost и один для 127.0.0.1.

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

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

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

лучший подход-получить 2 доменных имени для одного и того же IP и не полагаться на номера портов для cookies.

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

  • mysession8080 сервер работает на порту 8080
  • mysession8000 сервер работает на порту 8000

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

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

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

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

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

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

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

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

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

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

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

Comments

    Ничего не найдено.