Найти тему
Kangaroo

Cookies

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

Протокол HTTP ориентирован так, что не сохраняет информацию о состоянии соединения, то есть все запросы независимы друг от друг Между предыдущим и следующим запросом запросом нет никакой связи, и не существует такого свойства запроса ( IP адрес, агент пользователя и т.п.) которое позволило бы надежно использовать цепочку последовательных запросов от одного и того же лица.

Cookie - это небольшой блок информации, который оправляется веб-сервером и сохраняется браузером.

Допустим, вы обычный пользователь, открыли браузер и ввели в адресной строке google.com. Переходя по url, браузер посылает серверу HTTP-запрос, который начинается так:

GET/HTTP/1.1
Host: google.com

Полученный от Google ответ выглядит примерно так:

HTTP/1.1 200 OK
Content-Type: text/html
Set-Cookie: PREF=ID=6c12f22bdaf1a92c:TM116700671:LM116700671; expires=Sun, 25-Jan-2020 19:15:00 GMT; path=/; domain=google.com
Server: GWS/2.1

Обратите внимание на заголовок Set-Cookie. Браузер сохранит значение cookie и будет отправлять его Google при каждом обращении к этому сайту. Поэтому при следующем посещении сайта Google, запрос, отправленный браузером, будет иметь такой вид:

GET/HTTP/1.1
Host: google.com
Cookie: PREF=ID=6c12f22bdaf1a92c:TM116700671:LM116700671

Обнаружив заголовок Cookie, Google понимает, что запрос пришел от человека, уже посещавшего сайт. Значением cookie может быть, например, ключ в таблице базы данных, где хранятся сведения о пользователе. И Google мог бы отобразить на странице имя вашей учетной записи.

Потенциальные проблемы, присущие механизму cookie:

  • Сохранение cookies - дело добровольное, клиент не обязан принимать и сохранять cookies. На самом деле все браузеры позволяют пользователям самостоятельно определять порядок приема cookies.
  • Cookies (особенно посылаемые не по протоколу https) никак не защищены. Cookies уязвимы для прослушивания. То есть злоумышленник может перехватить cookie и прочитать его. Существует подобного вида, род атак: "человек по середине" - это когда злоумышленник перехватывает cookie и с его помощью выдает себя за другого пользователя.
  • Cookies не защищены даже от законных получателей. Большинство браузеров позволяют спокойно изменять содержимое cookies, а изобретательный пользователь может воспользоваться инструментальными средствами для конструирования HTTP-запросов вручную.

На заметку веб-разработчику:

Не следует хранить в cookies данные чувствительные к манипулированию. Типичная ошибка - сохранение в cookies чего-то вроде IsLoggedIn = 1 после успешного входа в систему. Вы не поверите, но некоторые сайты допускают подобную ошибку, чтобы обойти их систему защиты, достаточно нескольких секунд.

В следующий раз мы поговорим о том как работать с cookies в django.

Нравится контент? Жми лайк, подписывайся, а вот мы в телеграм и вконтакте.