ru en uk

  авторизація

(044) 362 48 16   (098) 294 41 60


   Ціни

Що таке куки


Після появи вебу і масового впровадження HTML сторінок девелопери зіткнулися з серйозною проблемою - невозмжностью відстеження послідовних запитів користувачів. Вся справа в тому, що після того, як броузер послав запит і одержав відповідь, HTTP з'єднанняе закривається і більше про користувача ніхто нічого не знає. Компанія Netscape Communications розробила нову технологію Cookies і впровадила її в свої веб-сервери (Web Planet) і броузери (Netscape Navigator). Пізніше майже всі сервери і броузери почали підтримувати куки

Кука - це інформація яка зберігається в броузері (спочатку в NN - файл cookies.txt) і кожен раз передається від клієнта серверу разом із запитом та іншими заголовками (HTTP Request Headers). Таким чином при наступних запитах сервер може отримати значення змінних, встановлені на відвіданіних раніше сторінках.
Також читайте RFC2965, RFC2109
<h6> Синтаксис Set-Cookie заголовка відповіді </ h6>
<pre> set-cookie = "Set-Cookie:" cookies
cookies = 1 # cookie
cookie = NAME "=" VALUE *(";" cookie-av)
NAME = attr
VALUE = value
cookie-av = "Comment" "=" value
| "Domain" "=" value
| "Max-Age" "=" value
| "Path" "=" value
| "Secure"
| "Version" "=" 1 * DIGIT </ pre>

Неофіційно, Set-Cookie заголовок включає обраний Set-Cookie:, за яким слідує перелік однієї або більше Кук. Кожна Кука починається з пари NAME = VALUE, за якими слідують нуль або більше пар атрибут-значення, розділених точками з комою. Синтаксис для пар атрибут-значитие був наведений вище. Пара NAME = VALUE повинна бути самої першої в оголошенні куки. Всі інші можуть слідувати в будь-якому порядку. Стандарт не передбачає поведінку при кількаразовому використанні однієї і тієї ж пари атрибут-значення.

<h5> NAME = VALUE </ h5>
Обов'язковотелен. Ім'я куки - NAME, і її значення - VALUE.
NAMEs які починаються на знак $ зарезервовані
для інших цілей і не повинні використовуватися.
<br>
Значення VALUE повинно бути байдуже клієнта і сервером
може бути встановлено будь-яке значення в обраній ASCII кодуєовке.
"Байдуже" означає, що вміст повинно цікавити
тільки вихідний сервер. Фактично, воно може бути прочитано
ким-небудь ктоаналізірует Set-Cookie заголовок.
<h5> Comment = comment </ h5>
Необов'язковий. Because cookies can contain private information
about a user, the Cookie attribute allows an origin server to
document its intended use of a cookie. The user can inspect the
information to decide whether to initiate or continue a session
with this cookie.
<h5> Domain = domain </ h5>
Необязательный. The Domain attribute specifies the domain for
which the cookie is valid. An explicitly specified domain
must always start with a dot.
<h5> Max-Age = delta-seconds </ h5>
Необов'язковий. The Max-Age attribute defines the lifetime of the
cookie, in seconds. The delta-seconds value is a decimal non -
negative integer. After delta-seconds seconds elapse, the client
should discard the cookie. A value of zero means the cookie
should be discarded immediately.
<h5> Path = path </ h5>
Необов'язковий. The Path attribute specifiesthe subset of URLs to
which this cookie applies.
<h5> Secure </ h5>
Необов'язковий. The Secure attribute (with no value) directs the user
agent to use only (unspecified) secure means to contact the origin
server whenever it sends back this cookie.
<br>
what level of security it considers appropriate for "secure"
cookies. The Secure attribute should be considered security
advice from the server to the user agent, indicating that it is in
the session'sinterest to protect the cookie contents.
<h5> Version = version </ h5>
Обов'язковий. The Version attribute, a decimal integer, identifies to
which version of the state management specification the cookie
conforms. For this specification, Version = 1 applies.

Як встановити Куку


Кука встановлюється трьома способами:

  1. Веб-сервером (при включенні відповідних установок)
  2. Через заголовки відповіді CGI додатки (наприклад Perl, PHP, C, Sh)
  3. Через клієнтський скрипт (javascript а також vbscript під IE4 +)

Установка куки сервером Apache


При наявності модуля mod_cookies сервер Apache дає можливість через установку директиви CookieLog filename записувати в filename унікальні куки клієнта. Таким чином, після аналізу цього лог-файлу ми можемо простежити активність користувача, або його clickstream. Починаючи з Apache 1.2 цей модуль був замінений на mod_usertrack і була прибрана можливість створювати окремий куки-лог. Для цього предполагается в загальному лог-файлі використовувати "% (cookie) n" параметр. Наприклад так
CustomLog logs / clickstream "% (cookie) n% r% t"
Додатково можна встановлювати такі директиви (в server congif або virtual host)

  1. CookieExpires
  2. CookieName ім'я куки (також можна вказати в. htaccess або directory)
  3. CookieTracking on | off (також можна вказати в. Htaccess або directory)

Установка куки CGI додатком


Встановити Куку з CGI програми можна надіславши Наступне заголовок (тобто послав строку до початку виведення власне вмісту, що йде після заголовка "Content-type:")
<pre> Set-Cookie:
name = value
[; EXPIRES = dateValue]
[; DOMAIN = domainName]
[; PATH = pathName]
[; SECURE] </ pre>


  1. name = value установка для переменнной name значення value
  2. [; EXPIRES = dateValue] якщо вказано, то це дата коли дія куки закінчується, тобто вона знищується з броузера. Якщо не вказано, Кука вигублюается після закриття вікна броузера. В останньому випадку Куку часто називають сесійного. Формат дати такий:
    Wdy, DD-Mon-YY HH: MM: SS GMT
  3. [; DOMAIN = domainName] Якщо вказано, то це домен в межах якого броузер буде надсилати Куку сервера. Наприклад,якщо встановлено в example.com, то Кука пошле і на example.com і на pupkin.example.com. За замовчуванням встановлюється на поточний домен.
  4. [; PATH = pathName] Якщо вказано, то це віртуальний каталог сервера, у межах доторого броузер надсилатиме Куку. Наприклад, якщо встановлено в / user, то Кука пошле і на example.com / user / і на example.com / user / pupkin / но НЕ на example.com / smith /. За замовчуванням береться віртуальний каталог сторінки, яка засилает Куку.
    Коли використовуєте куки і <b> mod_rewrite </ b> будьте пильні! Ставте цей параметр наприклад, у "/" інакше скрипти, розташовані в одній директорії не зможуть використовувати загальні куки, т.к. викликаються через mod_rewrite. Також типова помилка --установка куки з скрипту в підтеку з наступним зверненням з скрипту в батьківської директорії. Якщо не встановити PATH, Кука не буде доступна!

  5. [; SECURE] якщо встановлено, то запобігає передачу куки по незахищеним каналам. Незахищеними єются всі протоколи крім https: / / Єдиний броузер який не розуміє цю директиву - Konquerror

Установка куки в PHP


Читаних значення куки в PHP


Видалення куки в PHP


Установкаі читання куки з javascript


Пам'ятайте, що не всі клієнти підтримують javascript, точніше не на всіх броузерах виконання javascript дозволено

<script language="javascript">
function GetValue (Offset) (
var End = document.cookie. indexOf (";", Offset);
if (End ==- 1)
End = document.cookie.length;
return unescape (document.cookie.substring (Offset, End));
)

function GetCookie (Name) (
var Len = Name.length;
var i = 0;
while (i <document.cookie.length) (
var j = i + Len +1;
if(document.cookie.substring (i, j) == (Name +"="))
return GetValue (j);
i = document.cookie.indexOf ( "", 1) 1;
if (i == 0)
break;
)
return null;
)

function SetCookie (Name, Value, Expire) (
var Exp = "Friday ,25-Feb-2000 12:00:00 GMT";
document.cookie = Name +"="+ escape (value) + "; expires =" + Expire;
)

</ script>

Видалення куки в javascript


Кешування Кук проксі серверами


Вихідний сервер повинен бути обізнаний про ефект можливого кешіровнія як повертаються, так і надісланих Set-Cookie заголовків. Кешіровніе "public" сторінок бажано. Для прикладу, якщо вихідний сервер хоче використати публічний документ, такий як "візитна сторінка" для відправки куки сесії, для чого він відправляє Set-Cookie заголовок, сторінка повинна бути розміщена в кеші "pre-expired" так що вихідний сервер побачить подальші запити. "Private" сторінки, навпаки, не повинні бути кеш.
Якщо Кука застосовується для окремого користувача, Set-cookie заголовок не повинен бути кешірованним. Set-cookie заголвок використовується спільно багатьма користувачами може бути кеш.

Вихідний сервер повинен послати наступний додатковий HTTP/1.1 заголовок відповіді, в залежності від обставин:

Щоб придушити кешування Set-Cookie заголовка:


і один з наступних:

  • Придушити кешування private document in shared caches:

    Cache-control: private
  • Дозволити кешування документа і вимагати перевірки перед показом

    Cache-control: must-revalidate
  • Дозволити кешування документа, але вимагати від кешірующіх проксі-серверів (не кешу броузера)
    перевірки документа перед посилкою клієнту

    Cache-control: proxy-revalidate
  • To allow caching of a document and request that it be validated
    before returning it to the client (by "pre-expiring" it):

    Cache-control: max-age = 0

    Not all caches will revalidate the document in every case.

HTTP/1.1 servers must send Expires: old-date (where old-date is a
date long in the past) on responses containing Set-Cookie response
headers unless they know for certain (by out of band means) that
there are no downsteam HTTP/1.0 proxies. HTTP/1.1 servers may send
other Cache-Control directives that permit caching by HTTP/1.1
proxies in addition to the

Expires: old-date
directive; the Cache-Control directive will override the Expires: old-date for HTTP/1.1
proxies.

Неправильні куки


З метою захистити клієнта від можливого порушенийия таємниці приватної інформації броузер повинен відхиляти куки (не зберігати інформація про них) в будь-якому з наступних випадків:

  • The value for the Path attribute is not a prefix of the request-URI.
  • The value for the Domain attribute contains no embedded dots or does not startwith a dot.
  • The value for the request-host does not domain-match the Domain attribute.
  • The request-host is a FQDN (not IP address) and has the form HD, where D is the value of the Domain attribute, and H is a string that contains one or more dots.

ПрІммера:

  • A Set-Cookie from request-host yxfoo.com for Domain =. foo.com would be rejected, because H is yx and contains a dot.
  • A Set-Cookie from request-host x.foo.com for Domain =. foo.com would be accepted.
  • A Set-Cookie with Domain =. com or Domain =. com.,will always be rejected, because there is no embedded dot.
  • A Set-Cookie with Domain = ajax.com will be rejected because the value for Domain does not begin with a dot.

Безпека Кук


Можливість підробки Кук (Cookie Spoofing).

Правильно розроблені програми можуть уникнути атак з використанням підроблених Кук c сусідніх доменів. Наприклад:

<ol>
<li> броузер робить запит на ламер_петя.host.com, і отримує Куку session_id = "1234" з доменом ламер_петя.host.com
<li & gt; броузер робить запит на хацкер_вася.host.com, і отримує Куку <br>
<b> session-id = "1111", Domain = ". host.com" </ b>
<li> Той же броузер робить запит на ламер_петя.host.com і посилає
<pre> Cookie: $ Version = "1";
session_id ="1234";
session_id = "1111"; $ Domain = ". host.com" </ pre>
Сервер на ламер_петя.host. повинен обчислити що друга Кука прийшла з іншого домену та проігнорувати її.

Приклад два

Ламер Петя має два сайті на кульовийхост. host.com. Він використовує куки на своїх сайтах 2 і хоче щоб вони були загальними, встановлює домен. Host.com. Хацкер Вася хостити поруч і переконує ламер Петю відвідати / заценить його сайт. Так як у Петра домен куки загальний, вона пошле і хацкеру Васе, де він зможе отримати особисту інформацію Пети, наприклад сесійний ключ на адміністрування сайту та поиздеваться над Петей скільки душі буде завгодно.

Privacy? куки.


Internet Exploer 6 зараз вимагає від сайтів, які посилають куки, мати P3P політику.Ось що говорить Microsoft:
"Internet Explorer 6 має розвинену фільтрацію Кук яка базується на специфікації Platform for Privacy Preferences (P3P). За замовчуванням, Internet Explorer 6 блокує сторонні куки які не мають краткой політики (короткий звіт про безпекити в зрозумілою комп'ютера формі) або сторонні куки, в описі яких не зазначено що вони використають вашу особисту інформацію без вашої прямої згоди. Вихідні куки, в описі яких не зазначено що вони використають вашу особисту інформацію без вашого явного згоди видаляються після закриття вікна броузера. First-party cookies that do not have a compact policy are leashed (restricted so that they can only be read in the first-party context). "<br>
Також дивіться: <a href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;q260971&GSSNB=1"> Сайт Microsoft</ a>


 
Введення в PHP5
29.05.2007
Як надіслати пошту
29.05.2007
Робота з базами даних
29.05.2007