Cookie: различия между версиями
[отпатрулированная версия] | [непроверенная версия] |
Содержимое удалено Содержимое добавлено
Нежелательная ссылка |
Изменение "куки" на "cookie" в соответствии с общепринятыми стандартами (например, стайлгайдом Майкрософта) |
||
Строка 1:
{{Другие значения|Cookie}}
{{HTTP}}
'''
* [[аутентификация|аутентификации]] пользователя;
* хранения персональных предпочтений и настроек пользователя;
* отслеживания состояния {{не переведено 5|Сеанс (информатика)|сеанса||Session (computer science)|}} доступа пользователя;
* ведения статистики о [[Пользователь|пользователях]].
Приём браузерами
С момента своего появления
Имеется и ряд заблуждений о куки. Они главным образом основаны на уверенности людей, что куки являются [[Компьютерная программа|компьютерными программами]]. На самом деле, куки — это простые текстовые [[Данные (вычислительная техника)|данные]], набор символов, передаваемый при запросах к веб-сайту, и они не могут выполнять какие-либо действия самостоятельно. В частности, куки не могут быть ни [[Вирус (компьютерный)|вирусами]], ни [[Шпионская программа|шпионскими программами]]. Таким образом, куки могут быть опасны только в плане деанонимизации и слежения за действиями пользователя.▼
Большинство современных браузеров позволяют пользователям выбрать — принимать куки или нет, но их отключение делает невозможной работу с некоторыми сайтами. Кроме того, необходимость частого ввода логина и пароля делает работу с сайтами менее удобной.▼
▲Имеется и ряд заблуждений о
▲Большинство современных браузеров
== Назначение ==
К примеру, если вход на сайт осуществляется при помощи
Многие сайты также используют
== Понятие ==
[[Файл:HTTP cookie exchange.PNG|thumb|300px|Возможное взаимодействие между браузером и сервером.]]
В техническом плане
Спецификации<ref name="Netscape">{{cite web|author=Netscape|url=http://lib.guru.ua/WEBMASTER/cookie_spec.txt|title=Предварительная спецификация кук|format=txt|accessdate=7 августа 2008|lang=en|archiveurl=http://www.webcitation.org/61DWr5bQ4|archivedate=2011-08-26}}</ref><ref name="rfc">RFC 2109 и RFC 2965 — Механизм управления состояниями HTTP ([[IETF]])</ref> указывают минимальные объёмы, которые должны предоставляться браузерами для хранения
Популярные браузеры имеют соответствующий максимум хранящихся
* [[Internet Explorer 6]] — 20
* [[Internet Explorer 7]] — 20
Строка 33 ⟶ 36 :
* [[Firefox 2.0]] — 50
На практике, некоторые браузеры могут накладывать более жёсткие ограничения. К примеру, Internet Explorer предоставляет 4096 байт для всех
Имена
Хранение
== История ==
По одной из версий, термин «
С помощью Джона Джаннандреа в тот же год Монтулли написал начальную спецификацию
Хотя некоторые люди знали о существовании
Развитие спецификаций
В то время рекламные компании уже вовсю использовали сторонние
== Заблуждения ==
С момента появления
*
*
*
*
В действительности же
== Работа
=== Установка
Запрашивая страницу, браузер отправляет веб-серверу короткий текст с HTTP-запросом. Например, для доступа к странице <nowiki>http://www.example.org/index.html</nowiki>, браузер отправляет на сервер <nowiki>www.example.org</nowiki> следующий запрос:
{|
Строка 80 ⟶ 83 :
| '''сервер'''
|}
Сервер отвечает, отправляя запрашиваемую страницу вместе с текстом, содержащим HTTP-ответ. Там может содержаться указание браузеру сохранить
{|
|
Строка 99 ⟶ 102 :
| '''сервер'''
|}
Строка <code>Set-cookie</code> отправляется лишь тогда, когда сервер желает, чтобы браузер сохранил
{|
|
Строка 118 ⟶ 121 :
| '''сервер'''
|}
Этот запрос отличается от первого запроса тем, что содержит строку, которую сервер отправил браузеру ранее. Таким образом, сервер узна́ет, что этот запрос связан с предыдущим. Сервер отвечает, отправляя запрашиваемую страницу и, возможно, добавив новые
Значение
=== Атрибуты
Кроме пары имя/значение,
<code>Set-Cookie: name=newvalue; expires=date; path=/; domain=.example.org</code>.
[[Файл:HTTP-Cookie-Google.png|thumb
Домен и путь говорят браузеру, что
Фактически,
Дата истечения указывает браузеру, когда удалить
<code>Set-Cookie: RMID=732423sdfs73242; expires=Fri, 31 Dec 2010 23:59:59 GMT; path=/; domain=.example.net</code>
=== Условия истечения срока хранения ===
Срок хранения
# В конце сеанса (например, когда браузер закрывается), если
# Дата истечения была указана, и срок хранения вышел.
# Браузер удалил
Заметим, что сервер может узнать, когда истекают сроки хранения
=== Аутентификация ===
# Пользователь вводит имя пользователя и пароль в текстовых полях страницы входа и отправляет их на сервер.
# Сервер получает имя пользователя и пароль, проверяет их и, при их правильности, отправляет страницу успешного входа, прикрепив
# Каждый раз, когда пользователь запрашивает страницу с сервера, браузер автоматически отправляет
Этот метод широко используется на многих сайтах, например на [[Yahoo!]], в [[Википедия|Википедии]] и в [[Facebook]].
Многие браузеры (в частности Opera, FireFox)
Однако серверное программное обеспечение может отслеживать такие попытки. Для этого сервер выдаёт
== Настройка браузера ==
[[Файл:Cookies in Firefox 3.0.PNG|thumb|200px|Просмотр и настройка
# Полное отключение
# Удаление
# Различение [[#Приватность и сторонние куки|сторонних
# Обработка
# Запрет
# Установка разумных сроков истечения
Большинство браузеров, поддерживающих JavaScript, позволяют пользователю увидеть активные на данном сайте
== Приватность и сторонние
{{статья
| автор =
Строка 195 ⟶ 198 :
}}</ref>.
[[Файл:Third party cookie.png|thumb|400px|Устанавливая баннеры на разных сайтах и используя сторонние
Рекламные компании используют сторонние
Создание профиля пользователей рассматривается как потенциальная угроза приватности даже при отслеживании в рамках одного домена, но особенно это актуально при отслеживания на нескольких доменах с использованием сторонних
[[Федеральное правительство США|Правительство Соединенных Штатов]] приняло строгие законы в отношении
Директива Евросоюза о конфиденциальности электронных данных от 2002 года<ref>{{cite web|datepublished=12 июля 2002|url=http://eur-lex.europa.eu/smartapi/cgi/sga_doc?smartapi!celexapi!prod!CELEXnumdoc&lg=en&numdoc=32002L0058&model=guichett|title=Директива о неприкосновенности частной жизни и электронных коммуникаций|accessdate=8 августа 2008|lang=en|archiveurl=http://www.webcitation.org/61DX34Jxw|archivedate=2011-08-26}}</ref> содержит нормы, касающиеся использования
# пользователю предоставляется информация о том, как эти данные используются;
# пользователь имеет возможность отказаться от этого.
Тем не менее
Спецификация [[P3P]] включает возможность для веб-сервера сообщить браузеру о нарушении конфиденциальности, указывая характер собираемой информации и цели сбора. Сюда входит и использование информации, полученной с помощью
Многие веб-браузеры, включая [[Safari]] от [[Apple]] и [[Internet Explorer]] версий 6 и 7 от Microsoft, поддерживают спецификации P3P, которые позволяют определить, следует ли разрешать сторонние
== Недостатки
Помимо проблем конфиденциальности,
=== Неточная идентификация ===
Если на компьютере используется более одного браузера, то, как правило, каждый имеет отдельное хранилище для
Аналогично,
=== Кража
Во время нормальной эксплуатации сервер и браузер пользователя постоянно обмениваются
[[Файл:Cookie-sniffing.PNG|thumb|200px|
Эта проблема может быть решена путём установления между пользователем и сервером шифрованного соединения с использованием протокола [[HTTPS]]. Сервер также может использовать специальный флаг при установке
Однако большое число веб-сайтов, даже использующих безопасные HTTPS-сессии для идентификации пользователя, затем отправляют
[[Файл:Cookie-theft.PNG|thumb|200px|Межсайтовый скриптинг:
Другой способ кражи
Следующий вид межсайтового скриптинга, как правило, используют на сайтах, где пользователям разрешено отправлять сообщения с HTML-содержимым. При вставке соответствующего PHP/Javascript -кода в сообщение атакующий может получить
Эти атаки можно предотвратить установкой флага HttpOnly,<ref>{{cite web|url=http://msdn.microsoft.com/en-us/library/ms533046.aspx|title=Снижение опасности межсайтового скриптинга с помощью HTTP-only кук|publisher=Microsoft|accessdate=8 августа 2008|lang=en|archiveurl=http://www.webcitation.org/60ujxtZnN|archivedate=2011-08-13}}</ref> делающей
=== Подмена
[[Файл:Cookie-poison.PNG|thumb|200px|Подмена
Хотя теоретически
Для защиты от подобных атак большинство веб-сайтов хранят в
=== Межсайтовые
[[Файл:Cookie-cooking.PNG|thumb|200px|Атакующий использует баг браузера для отправки серверу подложных
Каждый сайт должен иметь свои собственные
Для защиты пользователям рекомендуется использовать последние версии браузеров, в которых эта проблема исправлена.
=== Нестабильность между клиентом и сервером ===
=== Срок действия
Постоянные
Кроме того, правильно составленная вредоносная программа, которая может быть запущена после аутентификации пользователя, сможет перенести сессионные
Обычные
== Альтернативы
Некоторые операции, для которых используются
=== IP-адрес ===
{{main|IP-адрес}}
Этот ненадёжный метод отслеживания пользователей основан на хранении [[IP-адрес]]ов компьютеров, просматривающих страницы. Данная техника доступна с самого появления [[World Wide Web]], которая требует знания IP-адреса клиента для загрузки страницы. Эту информацию можно хранить на сервере вне зависимости от того, используются
Тем не менее этот способ менее надёжен, чем
Отслеживание по IP-адресу может оказаться невозможным и при использовании систем сохранения анонимности (например, [[Tor]]). В таких системах один браузер может иметь несколько IP-адресов, и несколько пользователей могут использовать один IP-адрес, в результате чего отслеживание IP-адреса не представляется возможным.
Строка 274 ⟶ 277 :
=== URL (строка запроса) ===
{{main|URL}}
Более прогрессивная методика основана на встраивании данных в URL. Обычно для этого используется строка запроса, но так же могут задействоваться и другие части URL. Языки [[JavaScript]] и [[PHP]] активно используют эти механизмы при отключенных
Веб-сервер добавляет строку запроса к ссылке на веб-страницу при её отправке в браузере. Когда пользователь переходит по ссылке, браузер возвращает строку запроса серверу.
В этом плане строка запроса и
Более того, даже если пользователь повторно обращается к одной и той же странице, нет никакой гарантии, что строка запроса останется неизменной. Например, при переходе с внутренних страниц сайта и с внешних поисковых систем
Другой недостаток строки запроса проявляется в вопросах безопасности: хранение идентификатора сессии в строке запроса упрощает проведение атаки. Передача идентификатора в
=== Скрытые поля формы ===
Одним из способов отслеживания сессии с помощью выполняемой на стороне сервера программы является использование веб-форм со скрытыми полями. Этот метод очень похож на строку запроса URL и обладает почти теми же преимуществами и недостатками, а если параметры формы отправляются HTTP-методом GET, то поля фактически станут частью URL, который браузер отправит на сервер. Но большинство форм обрабатывается HTTP POST, при которой информация не является ни частью URL, ни
Этот подход даёт два преимущества в вопросе отслеживания: во-первых, вставка информации в HTML-код и в POST, а не в URL, означает, что средний пользователь её просто не заметит, во-вторых, информация сессии не копируется с копированием URL (например, когда пользователь отправляет ссылку по электронной почте). Недостаток метода состоит в том, что информация сессии содержится в HTML-коде, поэтому веб-страница должна генерироваться каждый раз, когда её запрашивают, что увеличивает нагрузку на веб-сервер.
=== HTTP-аутентификация ===
Протокол HTTP включает в себя базовую аутентификацию и шифрование, которые разрешают доступ к странице, только когда пользователь введёт правильное имя пользователя и пароль. Если сервер запрашивает подобное, то браузер обращается к пользователю и, получив нужные данные, сохраняет и использует их для доступа к другим страницам, не требуя от пользователя вводить их заново. С точки зрения пользователя эффект тот же, что и при использовании
=== Сохранение на клиентской стороне ===
|