Протокол 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.
Нравится контент? Жми лайк, подписывайся, а вот мы в телеграм и вконтакте.