Как браузеры знают, какие куки отправлять на сервер при запросе? - PullRequest
4 голосов
/ 10 января 2012

Я знаю, как работают куки, только начал копать, почему Codeigniter не хранит сгенерированный токен csrf в SESSION, он просто хранит в куки.Заботясь о безопасности, я начал думать о параметрах функции php setcookie (), таких как путь и домен.И я спросил себя, возможно ли установить 'evil_cookie' с путем = '/' и доменом = 'www.goodsite.com' из другого домена, из какого-то 'www.evilsite.com'?И еще один вопрос: будет ли «evil_cookie» отправляться на «www.goodsite.com» при выполнении запроса на «www.goodsite.com»?

Итак, я прошел тест.Я создал файл 'set_cookie.php' и загрузил его на какой-нибудь сайт www.evilsite.com:

setcookie('evil_cookie', 'gotcha', time() + 60 * 30, '/', 'www.goodsite.com');

Я использовал плагины Firefox и Firebug + Cookie для просмотра отправленных и полученных файлов cookie.Итак, я получил «evil_cookie» после запроса к «www.evilsite.com/set_cookie.php».Однако файл cookie не был сохранен (по крайней мере, такого файла не было при просмотре в панели плагина cookie-файла firebug).Также оно не было отправлено при повторном запросе на «www.evilsite.com/set_cookie.php».Только что получил, но не сохранил.

С точки зрения браузера Firefox логично и безопасно сохранять cookie только для текущего домена.ИМХО эти установленные параметры cookie (), такие как путь и домен, в основном предназначены для управления файлами cookie для текущего домена и его поддоменов, но не для внешних доменов.Я был немного расстроен. Мне не удалось найти соответствующую информацию на php.net , поэтому я не уверен, что это поведение, связанное с браузером, и особенности того, как он работает с «сторонними файлами cookie», или это большестандарт?Все ли браузеры ведут себя одинаково?Если есть какой-либо надежный и надежный источник для таких заявлений, пожалуйста, поделитесь.

Это также относится к другому использованию файлов cookie - хранению данных сеанса (без использования собственных сеансов PHP, например, Codeigniter делает это).Таким образом, если все браузеры не разрешают сохранять куки с другим доменом, то все в порядке.Однако он не защищает от CSRF, поскольку «www.evilsite.com» может содержать злой код JavaScript, который создаст «evil_cookie» непосредственно на клиенте, когда пользователь выполнит запрос и получит запрос от «www.evilsite.com».

Ответы [ 3 ]

3 голосов
/ 10 января 2012

Файлы cookie подчиняются политике с тем же происхождением : сайт может писать и читать файлы cookie только для своего домена.

2 голосов
/ 10 января 2012

Файлы cookie могут быть установлены только для текущего домена или его поддоменов, как вы уже обнаружили (в противном случае любой может заменить чужой файл cookie; может возникнуть хаос).Это обеспечивается браузером: если вы попытаетесь установить куки для другого домена со стороны сервера (используя заголовок HTTP), браузер проигнорирует куки.Если вы попытаетесь сделать то же самое со стороны клиента (с использованием Javascript), политика того же происхождения не позволит вам сделать это.

Следовательно, www.evilsite.com может установить cookieдля его собственного домена с Javascript, но это не проблема: он уже может сделать это с помощью заголовка HTTP.Здесь нет нового вектора атаки.

1 голос
/ 10 января 2012

[…] возможно ли установить 'evil_cookie' с путем = '/' и доменом = 'www.goodsite.com' из другого домена, с какого-нибудь сайта 'www.evilsite.com'?

Нет, пользовательские агенты должны игнорировать директивы Set-Cookie с атрибутами Domain , которые не domain-match текущий запрашиваемый домен:

Пользовательский агент будет отклонять куки, если только атрибут Domain определяет область для куки, которая будет включать в себя источник сервер. Например, пользовательский агент примет файл cookie с Атрибут домена "example.com" или "foo.example.com" из foo.example.com, но пользовательский агент не примет файл cookie с Атрибут домена «bar.example.com» или «baz.foo.example.com».

Такие куки даже не будут приняты пользовательскими агентами. Аналогичное относится к атрибутам Path и Secure .

См. Также Как работают домены cookie браузера? для примеров того, как значения атрибута Domain интерпретируются пользовательскими агентами.

...