Файли cookies («кÑки») â Ñе Ð½ÐµÐ²ÐµÐ»Ð¸ÐºÑ ÑÑдки з даними, ÑÐºÑ Ð·Ð±ÐµÑÑгаÑÑÑÑÑ Ð±ÐµÐ·Ð¿Ð¾ÑеÑеднÑо в бÑаÑзеÑÑ. Ðони Ñ ÑаÑÑÐ¸Ð½Ð¾Ñ HTTP пÑоÑоколÑ, визнаÑеного ÑпеÑиÑÑкаÑÑÑÑ RFC 6265.
Файли cookies зазвиÑай вÑÑановлÑÑÑÑÑÑ Ð²ÐµÐ±ÑеÑвеÑом за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° HTTP Set-Cookie. ÐоÑÑм бÑаÑÐ·ÐµÑ Ð°Ð²ÑомаÑиÑно додаваÑиме ÑÑ
пÑи (майже) ÐºÐ¾Ð¶Ð½Ð¾Ð¼Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð´Ð¾ вÑдповÑдного Ð´Ð¾Ð¼ÐµÐ½Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑÑÑи заголовок HTTP Cookie.
Ðдним з найбÑлÑÑ Ð¿Ð¾ÑиÑÐµÐ½Ð¸Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑв викоÑиÑÑÐ°Ð½Ð½Ñ Ñ Ð°ÑÑенÑиÑÑкаÑÑÑ:
- ÐÑи вÑ
Ð¾Ð´Ñ Ð² ÑиÑÑемÑ, ÑеÑÐ²ÐµÑ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑÑ Ð²ÑдповÑÐ´Ñ Ð¾ÑÑÐ¸Ð¼Ð°Ð½Ñ Ð· заголовка HTTP
Set-Cookie, Ñоб додаÑи в Ñайл cookie ÑнÑкалÑний âÑденÑиÑÑкаÑÐ¾Ñ ÑеÑÑÑâ . - ÐаÑÑÑпного ÑазÑ, коли на Ñой Ñамий домен бÑде вÑдпÑавлено запиÑ, бÑаÑÐ·ÐµÑ Ð½Ð°Ð´ÑÑле Ñайл cookie викоÑиÑÑовÑÑÑи заголовок HTTP
Cookie. - Таким Ñином, ÑеÑÐ²ÐµÑ Ð·Ð½Ð°Ñ, Ñ Ñо зÑобив запиÑ.
Також ми маÑмо доÑÑÑп до ÑайлÑв cookies з бÑаÑзеÑа, викоÑиÑÑовÑÑÑи влаÑÑивÑÑÑÑ document.cookie.
У ÑÐ°Ð¹Ð»Ð°Ñ cookies Ñа ÑÑ Ð½ÑÑ Ð°ÑÑибÑÑÐ°Ñ Ñ Ð±Ð°Ð³Ð°Ñо ÑонкоÑÑв. Ð ÑÑÐ¾Ð¼Ñ ÑоздÑÐ»Ñ Ð¼Ð¸ деÑалÑно ÑÑ ÑозглÑнемо.
ÐÑиÑÑÐ²Ð°Ð½Ð½Ñ Ð· document.cookie
Чи збеÑÑÐ³Ð°Ñ Ð±ÑаÑÐ·ÐµÑ Ñайли cookie з ÑÑого ÑайÑÑ? ÐеÑевÑÑимо:
// Ðа javascript.info, ми викоÑиÑÑовÑÑмо Google Analytics Ð´Ð»Ñ Ð·Ð±Ð¾ÑÑ ÑÑаÑиÑÑики,
// ÑÐ¾Ð¼Ñ ÑÑÑ Ð¼Ð°ÑÑÑ Ð±ÑÑи деÑÐºÑ Ñайли cookies
alert( document.cookie ); // cookie1=value1; cookie2=value2;...
ÐнаÑÐµÐ½Ð½Ñ document.cookie ÑкладаÑÑÑÑÑ Ð· Ð¿Ð°Ñ name=value ÑоздÑлениÑ
;. Ðожна паÑа â Ñе окÑемий Ñайл cookie.
Щоб знайÑи певний Ñайл cookie поÑÑÑбно ÑоздÑлиÑи знаÑÐµÐ½Ð½Ñ document.cookie за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ ;, а поÑÑм знайÑи поÑÑÑбний клÑÑ Ð·Ð° його назвоÑ. ÐÐ»Ñ ÑÑого можна викоÑиÑÑовÑваÑи Ñк ÑегÑлÑÑÐ½Ñ Ð²Ð¸Ñази, Ñак Ñ ÑÑнкÑÑÑ Ð´Ð»Ñ ÑобоÑи з маÑивами.
ÐалиÑимо Ñе Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð´Ð»Ñ ÑамоÑÑÑÐ¹Ð½Ð¾Ñ ÑобоÑи ÑиÑаÑа. ÐкÑÑм Ñого, в кÑнÑÑ ÑоздÑÐ»Ñ Ð²Ð¸ знайдеÑе допомÑÐ¶Ð½Ñ ÑÑнкÑÑÑ Ð´Ð»Ñ ÑобоÑи з Ñайлами cookies.
ÐÐ°Ð¿Ð¸Ñ Ð² document.cookie
Ðи можемо запиÑÑваÑи в document.cookie. Ðле Ñе не пÑоÑÑо влаÑÑивоÑÑÑ Ð´Ð°Ð½Ð¸Ñ
, Ñе акÑеÑоÑи (геÑеÑи/ÑеÑеÑи). ÐÑиÑвоÑÐ½Ð½Ñ ÑиÑ
влаÑÑивоÑÑей обÑоблÑÑÑÑÑÑ Ð¾Ñобливим Ñином.
ÐÐ°Ð¿Ð¸Ñ Ð² document.cookie оновлÑÑ Ð»Ð¸Ñе вказаний Ñайл cookie, Ñа не ÑÑпаÑиме ÑеÑÑÑ.
ÐапÑиклад, Ñей виклик вÑÑановиÑÑ Ñайл cookie з Ñменем user Ñа знаÑеннÑм John:
document.cookie = "user=John"; // оновиÑи лиÑе Ñайл cookie пÑд Ð½Ð°Ð·Ð²Ð¾Ñ 'user'
alert(document.cookie); // показаÑи вÑÑ Ñайли cookies
ЯкÑо ви запÑÑÑиÑе Ñей код, Ñо, ÑвидÑе за вÑе, побаÑиÑе декÑлÑка ÑайлÑв cookies. Це ÑомÑ, Ñо опеÑаÑÑÑ document.cookie= оновлÑÑ Ð½Ðµ вÑÑ Ñайли cookies, а лиÑе вказаний Ñайли з Ñменем user.
ТеÑ
нÑÑно, ÑмâÑ Ñа знаÑÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶ÑÑÑ Ð¼ÑÑÑиÑи бÑдÑ-ÑÐºÑ Ñимволи. Щоб збеÑегÑи пÑавилÑне ÑоÑмаÑÑваннÑ, вони Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð±ÑÑи ÐºÐ¾Ð´Ð¾Ð²Ð°Ð½Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð²Ð±ÑÐ´Ð¾Ð²Ð°Ð½Ð¾Ñ ÑÑнкÑÑÑ encodeURIComponent.
// ÑпеÑÑалÑÐ½Ñ Ñимволи (пÑобÑли, киÑилиÑÑ), поÑÑебÑÑÑÑ ÐºÐ¾Ð´ÑваннÑ
let name = "my name";
let value = "John Smith";
// кодÑÐ²Ð°Ð½Ð½Ñ cookie Ñк my%20name=John%20Smith
document.cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value);
alert(document.cookie); // ...; my%20name=John%20Smith
РдекÑлÑка обмеженÑ:
- Ðа допомогоÑ
document.cookie, ви можеÑе вÑÑановиÑи/оновиÑи лиÑе один Ñайл cookie. - ÐаÑа
name=value, пÑÑÐ»Ñ ÐºÐ¾Ð´ÑваннÑencodeURIComponent, не повинна пеÑевиÑÑваÑи 4кÐ. Ð¢Ð¾Ð¼Ñ Ð¼Ð¸ не можемо збеÑÑгаÑи великий обʼÑм Ð´Ð°Ð½Ð¸Ñ Ñ ÑÐ°Ð¹Ð»Ð°Ñ cookie. - Ðозволена ÑÑмаÑна кÑлÑкÑÑÑÑ ÑайлÑв cookie на один домен пÑиблизно 20+, ÑоÑний лÑмÑÑ Ð·Ð°Ð»ÐµÐ¶Ð¸ÑÑ Ð²Ñд бÑаÑзеÑа.
Файли cookies маÑÑÑ ÑÑд аÑÑибÑÑÑв, деÑÐºÑ Ð· Ð½Ð¸Ñ Ð²Ð°Ð¶Ð»Ð¸Ð²Ñ Ñ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð±ÑÑи заданÑ.
ÐÑÑибÑÑи пеÑеÑаÑ
овÑÑÑÑÑÑ Ð¿ÑÑÐ»Ñ Ð¿Ð°Ñи key=value Ñа ÑоздÑлÑÑÑÑÑÑ ;, Ñк показано нижÑе:
document.cookie = "user=John; path=/; expires=Tue, 19 Jan 2038 03:14:07 GMT"
domain
domain=site.com
Ðомен визнаÑÐ°Ñ Ð·Ð²Ñдки бÑдÑÑÑ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ Ñайли cookie. ÐÑоÑе, на пÑакÑиÑÑ, ÑÑнÑÑÑÑ Ð´ÐµÑÐºÑ Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ â ми не можемо вказаÑи бÑдÑ-Ñкий домен.
Ðе ÑÑнÑÑ ÑпоÑÐ¾Ð±Ñ Ð·ÑобиÑи Ñайли cookie доÑÑÑпними з ÑнÑого Ð´Ð¾Ð¼ÐµÐ½Ñ 2-го ÑÑвнÑ, ÑÐ¾Ð¼Ñ other.com нÑколи не оÑÑÐ¸Ð¼Ð°Ñ Ñайл cookie заданий на site.com.
Це Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð°Ð´Ð»Ñ Ð±ÐµÐ·Ð¿ÐµÐºÐ¸, воно дозволÑÑ Ð½Ð°Ð¼ збеÑÑгаÑи конÑÑденÑÑÐ¹Ð½Ñ Ð´Ð°Ð½Ñ Ð² ÑÐ°Ð¹Ð»Ð°Ñ cookie, ÑÐºÑ Ð±ÑдÑÑÑ Ð´Ð¾ÑÑÑпними лиÑе на Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑайÑÑ.
Типово, Ñайли cookie доÑÑÑÐ¿Ð½Ñ Ð»Ð¸Ñе на ÑÐ¾Ð¼Ñ Ð´Ð¾Ð¼ÐµÐ½Ñ Ð½Ð° ÑÐºÐ¾Ð¼Ñ Ð±Ñли вÑÑановленÑ.
ÐвеÑнÑÑÑ ÑвагÑ, Ñо Ñипово Ñайли cookie Ñакож не доÑÑÑÐ¿Ð½Ñ Ñ Ð½Ð° пÑддоменÑ, ÑÐ°ÐºÐ¾Ð¼Ñ Ñк forum.site.com.
// ÑкÑо задаÑи Ñайл cookie на вебÑайÑÑ site.com ...
document.cookie = "user=John"
// ...ми не побаÑимо ÑÑ
на forum.site.com
alert(document.cookie); // коÑиÑÑÑваÑа немаÑ
â¦ÐÑоÑе ÑÑ Ð¿Ð¾Ð²ÐµÐ´ÑÐ½ÐºÑ Ð¼Ð¾Ð¶Ð½Ð° змÑниÑи. ЯкÑо ми Ñ
оÑемо дозволиÑи пÑддоменам на кÑÑÐ°Ð»Ñ forum.site.com оÑÑимÑваÑи Ñайли cookie Ð·Ð°Ð´Ð°Ð½Ñ Ð½Ð° site.com â Ñе Ñакож можливо.
ÐÐ»Ñ ÑÑого, вÑÑановлÑÑÑи Ñайл cookie за адÑеÑÐ¾Ñ site.com, ми Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ñвно задаÑи в аÑÑибÑÑÑ domain коÑеневий домен: domain=site.com. Ð¢Ð¾Ð´Ñ Ð²ÑÑ Ð¿Ñддомени побаÑаÑÑ Ñакий Ñайл cookie.
ÐапÑиклад:
// на site.com
// зÑобиÑи Ñайл cookie доÑÑÑпним на бÑдÑ-ÑÐºÐ¾Ð¼Ñ Ð¿ÑÐ´Ð´Ð¾Ð¼ÐµÐ½Ñ *.site.com:
document.cookie = "user=John; domain=site.com"
// пÑзнÑÑе
// на forum.site.com
alert(document.cookie); // Ñайл cookie user=John ÑÑнÑÑ
ÐÑÑоÑиÑно ÑклалоÑÑ Ñак Ñо, domain=.site.com(з кÑÐ°Ð¿ÐºÐ¾Ñ Ð¿ÐµÑед site.com) ÑпÑаÑÑÑ Ñак Ñамо, надаÑÑи доÑÑÑп до ÑайлÑв cookie з пÑддоменÑв. Ð¢ÐµÐ¿ÐµÑ ÐºÑапки на поÑаÑÐºÑ Ð´Ð¾Ð¼ÐµÐ½Ð½Ð¸Ñ
Ñмен ÑгноÑÑÑÑÑÑÑ, але деÑÐºÑ Ð±ÑаÑзеÑи можÑÑÑ Ð²ÑдмовиÑиÑÑ Ð²ÑÑановлÑваÑи Ñайл cookie, Ñо мÑÑÑиÑÑ ÑÐ°ÐºÑ ÐºÑапки.
ÐÑже, аÑÑибÑÑ domain ÑобиÑÑ Ñайли cookie доÑÑÑпними на пÑддоменаÑ
.
path
path=/mypath
URL-пÑеÑÑÐºÑ Ð°Ð´ÑеÑи повинен бÑÑи абÑолÑÑним. ÐÐ»Ñ Ñого Ñоб Ñайли cookie бÑли доÑÑÑпними Ð·Ñ ÑÑоÑÑнок за ÑÑÑÑ Ð°Ð´ÑеÑоÑ. Типово, Ñе поÑоÑна ÑÑоÑÑнка.
ЯкÑо в ÑÐ°Ð¹Ð»Ñ cookie задано path=/admin, Ñо вÑн видимий на ÑÑоÑÑнкаÑ
/admin Ñа /admin/something, але не на /home або /adminpage.
ÐазвиÑай, Ñоб зÑобиÑи Ñайл cookie доÑÑÑпним з ÑÑÑÑ
ÑÑоÑÑнок ÑайÑÑ, нам необÑ
Ñдно вказаÑи коÑÑнÑ: path=/. ЯкÑо Ñей аÑÑибÑÑ Ð½Ðµ вÑÑановлено, Ñипове знаÑÐµÐ½Ð½Ñ Ð¾Ð±ÑиÑлÑÑÑÑÑÑ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ ÑÑого меÑодÑ.
expires, max-age
Типово, ÑкÑо Ñайл cookie не Ð¼Ð°Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ з ÑÐ¸Ñ Ð°ÑÑибÑÑÑв, Ñо Ñайл Ð·Ð½Ð¸ÐºÐ°Ñ Ð¿Ñи закÑÐ¸Ð²Ð°Ð½Ð½Ñ Ð±ÑаÑзеÑа/вкладки. Ð¢Ð°ÐºÑ Ñайли cookies називаÑÑÑÑÑ ÑеÑÑйними (âsession cookiesâ).
Щоб Ñайли cookies могли âпеÑежиÑиâ закÑÐ¸Ð²Ð°Ð½Ð½Ñ Ð±ÑаÑзеÑа/вкладки, можна вÑÑановиÑи знаÑÐµÐ½Ð½Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ з аÑÑибÑÑÑв expires або max-age. max-age Ð¼Ð°Ñ Ð¿ÐµÑевагÑ, ÑкÑо вÑÑановлено обидва знаÑеннÑ.
expires=Tue, 19 Jan 2038 03:14:07 GMT
ТеÑмÑн пÑидаÑноÑÑÑ ÑÐ°Ð¹Ð»Ñ cookie визнаÑÐ°Ñ ÑаÑ, коли бÑаÑÐ·ÐµÑ Ð°Ð²ÑомаÑиÑно видалиÑÑ Ð¹Ð¾Ð³Ð¾ (вÑдповÑдно до ÑаÑового поÑÑÑ Ð±ÑаÑзеÑа).
ÐаÑа Ð¼Ð°Ñ Ð±ÑÑи вказана Ñаме в ÑÐ°ÐºÐ¾Ð¼Ñ ÑоÑмаÑÑ, в ÑаÑÐ¾Ð²Ð¾Ð¼Ñ Ð¿Ð¾ÑÑÑ GMT. Щоб оÑÑимаÑи пÑавилÑÐ½Ñ Ð´Ð°ÑÑ, можна ÑкоÑиÑÑаÑиÑÑ date.toUTCString. ÐапÑиклад, можемо вÑÑановиÑи, Ñо ÑеÑмÑн пÑидаÑноÑÑÑ ÑÐ°Ð¹Ð»Ñ cookie закÑнÑÑÑÑÑÑÑ ÑеÑез 1 денÑ:
// +1 Ð´ÐµÐ½Ñ Ð²Ñд ÑÑогоднÑ
let date = new Date(Date.now() + 86400e3);
date = date.toUTCString();
document.cookie = "user=John; expires=" + date;
ЯкÑо вÑÑановиÑи знаÑеннÑм паÑамеÑÑÑ expires даÑÑ Ð· минÑлого, Ñо Ñайл cookie видалиÑÑÑÑ.
max-age=3600
Це алÑÑеÑнаÑива expires, Ñкий вказÑÑ ÑеÑмÑн пÑидаÑноÑÑÑ cookie в ÑекÑндаÑ
з поÑоÑного моменÑÑ.
Як вÑÑановлено 0 або вÑдâÑмне знаÑеннÑ, Ñо Ñайл cookie бÑде видалено:
// Ñайл cookie бÑде видалено ÑеÑез 1 годинÑ
document.cookie = "user=John; max-age=3600";
// видалиÑи Ñайл cookie (ÑеÑмÑн пÑидаÑноÑÑÑ Ð·Ð°ÐºÑнÑÑÑÑÑÑÑ Ð¿ÑÑмо заÑаз)
document.cookie = "user=John; max-age=0";
secure
secure
Файл cookie повинен пеÑедаваÑиÑÑ Ð²Ð¸ÐºÐ»ÑÑно по HTTPS-пÑоÑоколÑ.
Ðа замовÑÑваннÑм, ÑкÑо ми ÑÑвоÑимо Ñайл cookie на http://site.com, ÑÐ¾Ð´Ñ Ð²Ñн авÑомаÑиÑно зâÑвиÑÑÑÑ Ð½Ð° https://site.com Ñа навпаки.
ТобÑо Ñайли cookie базÑÑÑÑÑÑ Ð½Ð° доменÑ, вони не залежаÑÑ Ð²Ñд пÑоÑоколÑв.
Ð ÑÐ°Ð·Ñ ÑкÑо Ñей аÑÑибÑÑ Ð·Ð°Ð´Ð°Ð½Ð¾, Ñо Ñайл cookie ÑÑвоÑений на https://site.com не бÑде доÑÑÑпний на ÑÐ¾Ð¼Ñ Ð¶ вебÑайÑÑ Ð· HTTP-пÑоÑоколом http://site.com. Ð¢Ð¾Ð¼Ñ ÑкÑо Ñайли cookie мÑÑÑÑÑÑ ÐºÐ¾Ð½ÑÑденÑÑÐ¹Ð½Ñ Ð´Ð°Ð½Ñ, ÑÐºÑ Ð² Ð¶Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑÐ°Ð·Ñ Ð½Ðµ маÑÑÑ Ð±ÑÑи вÑдпÑÐ°Ð²Ð»ÐµÐ½Ñ Ð¿Ð¾ незаÑиÑÑÐ¾Ð²Ð°Ð½Ð¾Ð¼Ñ HTTP-пÑоÑоколÑ, ÑÐ¾Ð´Ñ Ð¿Ð°ÑамеÑÑ secure Ñе пÑавилÑний вибÑÑ.
// пÑипÑÑÑимо, Ñо заÑаз ми на https://
// ÑÑвоÑимо заÑ
иÑений Ñайл cookie (доÑÑÑпний лиÑе по HTTPS)
document.cookie = "user=John; secure";
samesite
Це Ñе один аÑÑибÑÑ Ð±ÐµÐ·Ð¿ÐµÐºÐ¸. ÐÑн ÑÑвоÑений Ñоб Ð·Ð°Ñ Ð¸ÑаÑи вÑд Ñак Ð·Ð²Ð°Ð½Ð¸Ñ XSRF-аÑак (мÑжÑайÑова пÑдмÑна запиÑÑ).
Щоб зÑозÑмÑÑи Ñк вÑн пÑаÑÑÑ Ñа в ÑÐºÐ¸Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÐ°Ñ Ð¼Ð¾Ð¶Ðµ бÑÑи коÑиÑним, давайÑе деÑалÑнÑÑе ÑозглÑнемо понÑÑÑÑ XSRF-аÑак.
XSRF-аÑаки
УÑвÑÑÑ, Ñо ви ÑвÑйÑли в ÑвÑй облÑковий Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° ÑайÑÑ bank.com. ТобÑо: Ñ Ð²Ð°Ñ Ñ Ñайли cookie з даними аÑÑенÑиÑÑкаÑÑÑ Ð²Ñд ÑÑого ÑайÑÑ. ÐÐ°Ñ Ð±ÑаÑÐ·ÐµÑ Ð²ÑдпÑавлÑÑ ÑÑ
ÑайÑÑ bank.com пÑи ÐºÐ¾Ð¶Ð½Ð¾Ð¼Ñ Ð·Ð°Ð¿Ð¸ÑÑ, Ð´Ð»Ñ Ñого Ñоб Ñой ÑозпÑзнав Ð²Ð°Ñ Ñа виконав вÑÑ ÐºÐ¾Ð½ÑÑденÑÑÐ¹Ð½Ñ ÑÑнанÑÐ¾Ð²Ñ Ð¾Ð¿ÐµÑаÑÑÑ.
ТепеÑ, пеÑеглÑдаÑÑи вебÑÑоÑÑнки в ÑнÑÐ¾Ð¼Ñ Ð²ÑкнÑ, ви випадково поÑÑапили на ÑÐ°Ð¹Ñ evil.com. Цей ÑÐ°Ð¹Ñ Ð¼ÑÑÑиÑÑ ÐºÐ¾Ð´ JavaScript, Ñкий вÑдпÑавлÑÑ ÑоÑÐ¼Ñ <form action="https://bank.com/pay"> на bank.com з заповненими полÑми, ÑÐºÑ ÑнÑÑÑÑÑÑÑ ÑÑанзакÑÑÑ Ð½Ð° ÑаÑ
Ñнок Ñ
акеÑа.
ÐÑаÑÐ·ÐµÑ Ð²ÑдпÑавлÑÑ Ñайли cookies ÑоÑÐ°Ð·Ñ Ñк ви вÑдвÑдÑÑÑе ÑÐ°Ð¹Ñ bank.com, навÑÑÑ ÑкÑо ÑоÑма бÑла вÑдпÑавлена з evil.com. Ð¢Ð¾Ð¼Ñ Ð±Ð°Ð½Ðº âвпÑзнаÑâ Ð²Ð°Ñ Ñа дÑйÑно Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ Ð¿Ð»Ð°ÑÑж.
Така аÑака називаÑÑÑÑÑ Ð¼ÑжÑайÑова пÑдмÑна запиÑÑ (Cross-Site Request Forgery, XSRF).
ÐвÑÑно, ÑпÑÐ°Ð²Ð¶Ð½Ñ Ð±Ð°Ð½ÐºÐ¾Ð²Ñ ÑиÑÑеми заÑ
иÑÐµÐ½Ñ Ð²Ñд ÑÑого. У вÑÑÑ
згенеÑованиÑ
ÑайÑом bank.com ÑоÑмаÑ
Ñ ÑпеÑÑалÑне поле, Ñак званий âÑокен заÑ
иÑÑÑ Ð²Ñд XSRFâ, Ñкий не може бÑÑи Ð°Ð½Ñ Ð·Ð³ÐµÐ½ÐµÑований зловмиÑним ÑайÑом, Ð°Ð½Ñ Ð²Ð¸Ð»ÑÑений з вÑÐ´Ð´Ð°Ð»ÐµÐ½Ð¾Ñ ÑÑоÑÑнки. ÐловмиÑник може ÑпÑобÑваÑи вÑдпÑавиÑи ÑоÑÐ¼Ñ ÑÑди, але не може оÑÑимаÑи Ð´Ð°Ð½Ñ Ð½Ð°Ð·Ð°Ð´. Ð¡Ð°Ð¹Ñ bank.com пеÑевÑÑÑÑ ÐºÐ¾Ð¶Ð½Ñ Ð¾ÑÑÐ¸Ð¼Ð°Ð½Ñ ÑоÑÐ¼Ñ Ð½Ð° наÑвнÑÑÑÑ Ð´Ð°Ð½Ð¾Ð³Ð¾ ÑокенÑ.
ÐÑоÑе Ñакий Ð·Ð°Ñ Ð¸ÑÑ Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ Ð±ÑлÑÑе ÑаÑÑ Ð½Ð° ÑеалÑзаÑÑÑ. Ðам поÑÑÑбно пеÑеконаÑиÑÑ, Ñо кожна ÑоÑма неÑе в ÑÐ¾Ð±Ñ Ð¾Ð±Ð¾Ð²âÑзкове поле з Ñокеном, окÑÑм Ñого поÑÑÑбно пеÑевÑÑÑÑи вÑÑ Ð·Ð°Ð¿Ð¸Ñи.
ÐикоÑиÑÑÐ°Ð½Ð½Ñ Ð°ÑÑибÑÑÑ samesite в ÑÐ°Ð¹Ð»Ñ cookie
ÐÑÑибÑÑ samesite пÑопонÑÑ Ñе один ÑпоÑÑб заÑ
иÑÑÑ Ð²Ñд аÑак, Ñкий (в ÑеоÑÑÑ) не Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ âÑокен заÑ
иÑÑÑ Ð²Ñд xsrfâ.
РнÑого Ñ Ð´Ð²Ð° Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ñ Ð·Ð½Ð°ÑеннÑ:
samesite=strict(Ñе Ñаме, Ñоsamesiteбез заданого знаÑеннÑ)
Файли cookie з паÑамеÑÑом samesite=strict нÑколи не вÑдпÑавлÑÑÑÑÑÑ ÑкÑо коÑиÑÑÑÐ²Ð°Ñ Ð¿ÑийÑов Ð·Ð·Ð¾Ð²Ð½Ñ (з ÑнÑого ÑайÑÑ).
ÐнÑими Ñловами, ÑкÑо коÑиÑÑÑÐ²Ð°Ñ Ð¿ÐµÑейÑов за поÑиланнÑм Ð·Ñ Ñвого елекÑÑонного лиÑÑа або вÑдпÑавив ÑоÑÐ¼Ñ Ð· evil.com, або виконав ÑÐºÑ Ð·Ð°Ð²Ð³Ð¾Ð´Ð½Ð¾ опеÑаÑÑÑ, Ñо поÑ
одиÑÑ Ð· ÑнÑого доменÑ, Ñайли cookie не вÑдпÑавлÑÑÑÑÑ.
ЯкÑо Ñайл cookie аÑÑенÑиÑÑкаÑÑÑ Ð¼Ð°Ñ Ð°ÑÑибÑÑ samesite=strict, ÑÐ¾Ð´Ñ Ñ XSRF-аÑаки Ð½ÐµÐ¼Ð°Ñ ÑанÑÑ Ð½Ð° ÑÑпÑÑ
, ÑÐ¾Ð¼Ñ Ñо Ð·Ð°Ð¿Ð¸Ñ Ð· ÑайÑÑ evil.com надÑ
одиÑÑ Ð±ÐµÐ· ÑÐ°Ð¹Ð»Ñ cookie. Таким Ñином, bank.com не ÑденÑиÑÑкÑÑ ÐºÐ¾ÑиÑÑÑваÑа Ñа не здÑйÑниÑÑ Ð¿Ð»Ð°ÑÑж.
ÐаÑ
иÑÑ Ð´Ð¾Ð²Ð¾Ð»Ñ Ð½Ð°Ð´Ñйний. Файли cookie з аÑÑибÑÑом samesite=strict вÑдпÑавлÑÑимÑÑÑÑÑ ÑÑлÑки ÑкÑо опеÑаÑÑÑ Ð½Ð°Ð´Ñ
одÑÑÑ Ð· bank.com, напÑиклад вÑдпÑÐ°Ð²Ð»ÐµÐ½Ð½Ñ ÑоÑми з ÑнÑÐ¾Ñ ÑÑоÑÑнки Ð´Ð¾Ð¼ÐµÐ½Ñ bank.com.
ХоÑа, Ñ ÑÑого ÑÑÑÐµÐ½Ð½Ñ Ñ Ð´ÑÑбний недолÑк.
Ðоли коÑиÑÑÑÐ²Ð°Ñ Ð¿ÐµÑеÑ
одиÑÑ Ð·Ð° легÑÑимним поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð¾ bank.com, Ñк Ñо Ð·Ñ ÑвоÑÑ
ноÑаÑок, Ñо вÑн бÑде непÑиÑмно здивований коли bank.com не âвпÑзнаÑâ його. ÐÑйÑно, в ÑÐ°ÐºÐ¾Ð¼Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ Ñайл cookie з аÑÑибÑÑом samesite=strict не вÑдпÑавлÑÑÑÑÑÑ.
Ð¦Ñ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð¼Ð¾Ð¶Ð½Ð° виÑÑÑиÑи викоÑиÑÑаннÑм двоÑ
ÑайлÑв cookie: один Ð´Ð»Ñ Ð·Ð°Ð³Ð°Ð»ÑÐ½Ð¾Ñ ÑденÑиÑÑкаÑÑÑ, лиÑе Ð´Ð»Ñ Ñого Ñоб ÑказаÑи: âÐÑивÑÑ, Ðванâ, а ÑнÑий з паÑамеÑÑом samesite=strict Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑÑй з даними. Ð¢Ð¾Ð´Ñ Ð¾Ñоба, Ñка пеÑейÑла за поÑиланнÑм поза межами ÑайÑÑ Ð¿Ð¾Ð±Ð°ÑиÑÑ Ð¿ÑивÑÑаннÑ, пÑоÑе Ð´Ð»Ñ Ñого Ñоб дÑÑгий Ñайл cookie вÑдпÑавивÑÑ, плаÑÑÐ¶Ð½Ñ Ð¾Ð¿ÐµÑаÑÑÑ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð±ÑÑи ÑнÑÑÑÐ¹Ð¾Ð²Ð°Ð½Ñ Ð· ÑайÑÑ Ð±Ð°Ð½ÐºÑ.
samesite=lax(Ñе Ñаме, Ñоsamesiteбез заданого знаÑеннÑ)
СпÑоÑене ÑÑÑÐµÐ½Ð½Ñ Ñке Ñак Ñамо Ð·Ð°Ñ Ð¸ÑÐ°Ñ Ð²Ñд XSRF-аÑак, але не ÑÑйнÑÑ Ð¾ÑÑкÑÐ²Ð°Ð½Ð½Ñ ÐºÐ¾ÑиÑÑÑваÑа.
Режим lax, Ñак Ñамо Ñк strict, забоÑонÑÑ Ð±ÑаÑзеÑÑ Ð²ÑдпÑавлÑÑи Ñайл cookies коли Ð·Ð°Ð¿Ð¸Ñ Ð¿ÑиÑ
одиÑÑ Ð½Ðµ з ÑайÑÑ, але Ñ Ð¾Ð´Ð½Ðµ виклÑÑеннÑ.
Файл cookie з паÑамеÑÑом samesite=lax вÑдпÑавлÑÑÑÑÑÑ Ð»Ð¸Ñе ÑодÑ, коли виконÑÑÑÑÑÑ Ð¾Ð±Ð¸Ð´Ð²Ñ Ñмови:
-
ÐбÑаний HTTP-меÑод безпеÑний (напÑиклад GET, але не POST)
Ðовний ÑпиÑок безпеÑÐ½Ð¸Ñ HTTP-меÑодÑв зÑбÑано в ÑпеÑиÑÑкаÑÑÑ RFC7231. Ðо ÑÑÑÑ, безпеÑними вважаÑÑÑÑÑ Ð¼ÐµÑоди ÑÐºÑ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑÑÑÑÑÑ Ð´Ð»Ñ ÑиÑаннÑ, а не Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð´Ð°Ð½Ð¸Ñ . Ðони не Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½ÑваÑи Ð¶Ð¾Ð´Ð½Ð¸Ñ Ð¾Ð¿ÐµÑаÑÑй ÑедагÑÐ²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ . ÐеÑÐµÑ Ñд за поÑиланнÑм Ñе завжди меÑод GET, ÑобÑо безпеÑний.
-
ÐпеÑаÑÑÑ Ð²Ð¸ÐºÐ¾Ð½ÑÑ Ð½Ð°Ð²ÑгаÑÑÑ Ð²Ð¸Ñого ÑÑÐ²Ð½Ñ (змÑнÑÑ URL в адÑеÑÐ½Ð¾Ð¼Ñ Ð¿Ð¾Ð»Ñ Ð±ÑаÑзеÑа)
Як пÑавило, ÑÑ Ñмова виконÑÑÑÑÑÑ, пÑоÑе ÑкÑо навÑгаÑÑÑ Ð²ÑдбÑваÑÑÑÑÑ Ð²
<iframe>Ñо Ñе не виÑий ÑÑвенÑ. Також, меÑоди JavaScript Ð´Ð»Ñ Ð¼ÐµÑÐµÐ¶ÐµÐ²Ð¸Ñ Ð·Ð°Ð¿Ð¸ÑÑв не виконÑÑÑÑ Ð½Ð°Ð²ÑгаÑÑÑ, ÑÐ¾Ð¼Ñ Ð²Ð¾Ð½Ð¸ не пÑÐ´Ñ Ð¾Ð´ÑÑÑ.
Ð¢Ð¾Ð¼Ñ Ð½Ð°ÑпÑавдÑ, вÑе Ñо ÑобиÑÑ Ð°ÑÑибÑÑ samesite=lax â Ñе дозволÑÑ Ð½Ð°Ð¹Ð±ÑлÑÑ Ð¿Ð¾ÑиÑеним опеÑаÑÑÑм (Ñаким Ñк пеÑеÑ
Ñд по URL) пеÑедаваÑи Ñайли cookie. ÐапÑиклад, вÑдкÑÐ¸Ð²Ð°Ð½Ð½Ñ Ð²ÐµÐ±ÑайÑÑ Ð·Ð° поÑиланнÑм Ð·Ñ ÑвоÑÑ
ноÑаÑок, Ñо повнÑÑÑÑ Ð·Ð°Ð´Ð¾Ð²Ð¾Ð»ÑнÑÑ Ñмовам.
Ðле бÑдÑ-Ñка бÑлÑÑ Ñкладна опеÑаÑÑÑ, Ñк Ñо меÑежевий Ð·Ð°Ð¿Ð¸Ñ Ð· ÑнÑого ÑайÑÑ Ñи вÑдпÑÐ°Ð²Ð»ÐµÐ½Ð½Ñ ÑоÑми, вÑÑаÑÐ°Ñ Ñайли cookies.
ЯкÑо Ð²Ð°Ñ Ñе влаÑÑовÑÑ, ÑÐ¾Ð´Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑÐ°Ð½Ð½Ñ samesite=lax ÑкоÑÑÑе за вÑе не зÑпÑÑÑ Ð²ÑÐ°Ð¶ÐµÐ½Ð½Ñ ÐºÐ¾ÑиÑÑÑваÑа вÑд взаÑмодÑÑ Ð· ваÑим ÑайÑом Ñа заÑ
иÑÑиÑÑ Ð´Ð°Ð½Ñ.
Ð ÑÑломÑ, samesite â Ñе ÑÑдовий паÑамеÑÑ.
РлиÑе один недолÑк:
samesiteÑгноÑÑÑÑÑÑÑ (не пÑдÑÑимÑÑÑÑÑÑ) ÑÑаÑими веÑÑÑÑми бÑаÑзеÑÑв, до 2017 ÑÐ¾ÐºÑ Ñ ÑанÑÑе.
ТомÑ, ÑкÑо Ð´Ð»Ñ Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑÐµÐ½Ð½Ñ Ð·Ð°Ñ
иÑÑÑ, покладаÑиÑÑ Ð²Ð¸ÐºÐ»ÑÑно на аÑÑибÑÑ samesite, Ñо ÑÑаÑÑ Ð±ÑаÑзеÑи залиÑаÑÑÑÑ Ð²Ñазливими.
ÐвÑÑно, ми можемо викоÑиÑÑовÑваÑи samesite Ñазом з ÑнÑими заÑобами безпеки, Ñакими Ñк âÑокен заÑ
иÑÑÑ Ð²Ñд xsrfâ, Ñоб додаÑи Ñе один ÑÑÐ²ÐµÐ½Ñ Ð·Ð°Ñ
иÑÑÑ, а поÑÑм в майбÑÑнÑомÑ, коли ÑÑаÑÑ Ð±ÑаÑзеÑи вимÑÑÑÑ, ми зможемо вÑдмовиÑиÑÑ Ð²Ñд ÑокенÑв.
httpOnly
Цей аÑÑибÑÑ Ð½Ðµ Ð¼Ð°Ñ Ð½ÑÑого ÑпÑлÑного з JavaScript, але ми Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð·Ð³Ð°Ð´Ð°Ñи його заÑади повноÑи каÑÑини.
ÐебÑеÑÐ²ÐµÑ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Set-Cookie Ñоб задаÑи Ñайли cookie. Також вÑн може вÑÑановиÑи аÑÑибÑÑ httpOnly.
Ðаний аÑÑибÑÑ Ð·Ð°Ð±Ð¾ÑонÑÑ Ð±ÑдÑ-Ñкий доÑÑÑп до ÑайлÑв cookie з JavaScript. Ðи не можемо баÑиÑи Ñи манÑпÑлÑваÑи Ñайлами cookie коÑиÑÑÑÑÑиÑÑ document.cookie.
Ðого викоÑиÑÑовÑÑÑÑ Ñк запобÑжний меÑод, Ñоб Ð·Ð°Ñ Ð¸ÑÑиÑи вÑд деÑÐºÐ¸Ñ Ð°Ñак, коли Ñ Ð°ÐºÐµÑ Ð²Ð¶Ð¸Ð²Ð»ÑÑ Ð½Ð° ÑÑоÑÑÐ½ÐºÑ ÑвÑй влаÑний код JavaScript Ñа ÑÐµÐºÐ°Ñ Ð¿Ð¾ÐºÐ¸ коÑиÑÑÑÐ²Ð°Ñ Ð·Ð°Ð¹Ð´Ðµ на ÑÐ°ÐºÑ ÑÑоÑÑнкÑ. Ðа ÑдеалÑÐ½Ð¸Ñ Ñмов Ñе Ð²Ð·Ð°Ð³Ð°Ð»Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾, Ñ Ð°ÐºÐµÑи не Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð¼Ð°Ñи можливоÑÑÑ Ð¿ÑоникнÑÑи ÑвоÑм кодом на Ð½Ð°Ñ ÑайÑ, але в ÐºÐ¾Ð´Ñ Ð¼Ð¾Ð¶ÑÑÑ Ð±ÑÑи помилки, ÑÐºÑ Ð²Ñе ж дозволÑÑÑÑ Ñм Ñе зÑобиÑи.
ÐазвиÑай, ÑкÑо Ñаке ÑÑаплÑÑÑÑÑÑ, Ñ ÐºÐ¾ÑиÑÑÑÐ²Ð°Ñ Ð²Ñе ж зайÑов на вебÑÑоÑÑÐ½ÐºÑ Ñ Ñ
акеÑÑÑким кодом JavaScript, ÑÐ¾Ð´Ñ ÐºÐ¾Ð´ виконÑÑÑÑÑÑ Ñа оÑÑимÑÑ Ð´Ð¾ÑÑÑп до команди document.cookie, Ñка мÑÑÑиÑÑ Ð°ÑÑенÑиÑÑкаÑÑÐ¹Ð½Ñ ÑнÑоÑмаÑÑÑ. Це погано.
ÐÑоÑе ÑкÑо Ñайл cookie Ð¼Ð°Ñ Ð¿Ð°ÑамеÑÑ httpOnly, Ñо в ÑÐ°ÐºÐ¾Ð¼Ñ ÑÐ°Ð·Ñ document.cookie не баÑиÑÑ Ð¹Ð¾Ð³Ð¾, ÑÐ¾Ð¼Ñ Ñайл в безпеÑÑ.
ÐодаÑок: ФÑнкÑÑÑ ÑайлÑв cookie
ТÑÑ Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾ Ð½ÐµÐ²ÐµÐ»Ð¸ÐºÑ Ð¿ÑдбÑÑÐºÑ ÑÑнкÑÑй Ð´Ð»Ñ ÑобоÑи з Ñайлами cookie, бÑлÑÑ Ð·ÑÑÑниÑ
анÑж ÑÑÑна модиÑÑкаÑÑÑ document.cookie.
ÐÑнÑÑ Ð±ÐµÐ·Ð»ÑÑ Ð±ÑблÑоÑек Ð´Ð»Ñ ÑобоÑи з Ñайлами cookie, ÑÐ¾Ð¼Ñ ÑÑ ÑÑнкÑÑÑ ÑÑÑ ÑкоÑÑÑе в демонÑÑÑаÑÑÐ¹Ð½Ð¸Ñ ÑÑлÑÑ . Ðле повнÑÑÑÑ ÑобоÑÑ.
getCookie(name)
ÐайкоÑоÑÑий ÑлÑÑ Ñоб оÑÑимаÑи доÑÑÑп до ÑайлÑв cookie Ñе викоÑиÑÑÐ°Ð½Ð½Ñ ÑегÑлÑÑÐ½Ð¸Ñ Ð²Ð¸ÑазÑв.
ФÑнкÑÑÑ getCookie(name) повеÑÑÐ°Ñ Ñайл cookie з заданим Ñменем name:
// повеÑÑÐ°Ñ Ñайл cookie з заданим Ñменем
// або undefined ÑкÑо нÑÑого не знайдено
function getCookie(name) {
let matches = document.cookie.match(new RegExp(
"(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
));
return matches ? decodeURIComponent(matches[1]) : undefined;
}
ТÑÑ Ð´Ð¸Ð½Ð°Ð¼ÑÑно генеÑÑÑÑÑÑÑ new RegExp Ñкий задоволÑнÑÑ ; name=<value>.
ÐвеÑнÑÑÑ ÑвагÑ, Ñо знаÑÐµÐ½Ð½Ñ ÑÐ°Ð¹Ð»Ñ cookie закодоване, ÑÐ¾Ð¼Ñ getCookie викоÑиÑÑовÑÑ Ð²Ð¼Ð¾Ð½ÑÐ¾Ð²Ð°Ð½Ñ ÑÑнкÑÑÑ decodeURIComponent Ñоб ÑозÑиÑÑÑваÑи його.
setCookie(name, value, attributes)
ÐÑÑановлÑÑ Ñайл cookie з заданим ÑмâÑм name, знаÑеннÑм value, Ñа Ñиповим паÑамеÑÑом path=/ (можна ÑедагÑваÑи, Ñоб додаÑи ÑнÑÑ ÑÐ¸Ð¿Ð¾Ð²Ñ Ð·Ð½Ð°ÑеннÑ):
function setCookie(name, value, attributes = {}) {
attributes = {
path: '/',
// за поÑÑеби додайÑе ÑнÑÑ ÑÐ¸Ð¿Ð¾Ð²Ñ Ð·Ð½Ð°ÑеннÑ
...attributes
};
if (attributes.expires instanceof Date) {
attributes.expires = attributes.expires.toUTCString();
}
let updatedCookie = encodeURIComponent(name) + "=" + encodeURIComponent(value);
for (let attributeKey in attributes) {
updatedCookie += "; " + attributeKey;
let attributeValue = attributes[attributeKey];
if (attributeValue !== true) {
updatedCookie += "=" + attributeValue;
}
}
document.cookie = updatedCookie;
}
// ÐÑиклад викоÑиÑÑаннÑ:
setCookie('user', 'John', {secure: true, 'max-age': 3600});
deleteCookie(name)
Щоб видалили Ñайли cookie, ми можемо викликаÑи ÑÑнкÑÑÑ Ð²ÐºÐ°Ð·Ð°Ð²Ñи вÑдâÑмне знаÑÐµÐ½Ð½Ñ Ð² паÑамеÑÑÑ max-age:
function deleteCookie(name) {
setCookie(name, "", {
'max-age': -1
})
}
ÐаÑважÑе: коли ми оновлÑÑмо Ñи видалÑÑмо Ñайли cookie, ми Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑваÑи ÑÑ ÑÐ°Ð¼Ñ Ð°Ð´ÑеÑÑ Ñа доменне ÑмâÑ, Ñо Ñ Ð¿Ñи вÑÑановленнÑ.
ÐÑе Ñазом: cookie.js.
ÐодаÑок: СÑоÑÐ¾Ð½Ð½Ñ Ñайли cookies
Файли cookie називаÑÑÑÑÑ âÑÑоÑоннÑмиâ, ÑкÑо вони ÑозмÑÑÐµÐ½Ñ Ð· Ð´Ð¾Ð¼ÐµÐ½Ñ Ñкий вÑдÑÑзнÑÑÑÑÑÑ Ð²Ñд Ñого, до Ñкого належиÑÑ Ð¿Ð¾ÑоÑна ÑÑоÑÑнка.
ÐапÑиклад:
-
СÑоÑÑнка ÑозмÑÑена на
site.comзаванÑажÑÑ Ð±Ð°Ð½ÐµÑ Ð· ÑнÑого ÑайÑÑ:<img src="https://ads.com/banner.png">. -
Разом з банеÑом, вÑддалений ÑеÑÐ²ÐµÑ Ð½Ð°
ads.comможе вÑÑановиÑи заголовокSet-CookieÐ·Ñ Ð·Ð½Ð°ÑеннÑмid=1234взÑÑим з ÑÐ°Ð¹Ð»Ñ cookie. СÑвоÑÐµÐ½Ñ Ñайли cookie Ð¿Ð¾Ñ Ð¾Ð´ÑÑÑ Ð· доменÑads.comÑа бÑдÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ñ Ð»Ð¸Ñе зads.com: -
ÐаÑÑÑпного ÑÐ°Ð·Ñ ÐºÐ¾Ð»Ð¸
ads.comвÑдпÑавиÑÑ Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° доÑÑÑп, вÑддалений ÑеÑÐ²ÐµÑ Ð¾ÑÑимаÑidз ÑÐ°Ð¹Ð»Ñ cookie Ñа ÑозпÑÐ·Ð½Ð°Ñ ÐºÐ¾ÑиÑÑÑваÑа: -
ÐÑе важливÑÑе Ñе, Ñо коли коÑиÑÑÑÐ²Ð°Ñ Ð¿ÐµÑÐµÑ Ð¾Ð´Ð¸ÑÑ Ð·
site.comдо ÑнÑого ÑайÑÑother.com, на ÑÐºÐ¾Ð¼Ñ Ñакож Ñ Ð±Ð°Ð½ÐµÑ, ÑодÑads.comоÑÑимÑÑ Ñайли cookie, Ñак наÑе вони наÑпÑÐ°Ð²Ð´Ñ Ð½Ð°Ð»ÐµÐ¶Ð°ÑÑads.comÑ Ñаким Ñином ÑозпÑÐ·Ð½Ð°Ñ Ð²ÑдвÑдÑваÑа Ñа вÑдÑÑежиÑÑ Ð¹Ð¾Ð³Ð¾, коли Ñой пеÑемÑÑаÑÑÑÑÑ Ð¼Ñж ÑайÑами:
СÑоÑÐ¾Ð½Ð½Ñ Ñайли cookie ÑÑадиÑÑйно викоÑиÑÑовÑÑÑÑÑÑ Ð´Ð»Ñ Ð²ÑдÑÑÐµÐ¶ÐµÐ½Ð½Ñ ÑÑаÑиÑÑики вÑдвÑдÑÐ²Ð°Ð½Ñ Ñа Ð¿Ð¾ÐºÐ°Ð·Ñ Ñеклами. Ðони пÑивâÑÐ·Ð°Ð½Ñ Ð´Ð¾ поÑаÑкового доменÑ, ÑÐ¾Ð¼Ñ ads.com може вÑдÑÑежÑваÑи одного й Ñого ж коÑиÑÑÑваÑа пÑи пеÑеÑ
Ð¾Ð´Ñ Ð¼Ñж ÑайÑами, ÑкÑо вÑÑ Ð²Ð¾Ð½Ð¸ маÑÑÑ Ð´Ð¾ нÑого доÑÑÑп.
ÐÑиÑодно, Ñо деÑÐºÑ Ð»Ñди не Ñ Ð¾ÑÑÑÑ Ñоб за ними ÑÑежили, ÑÐ¾Ð¼Ñ Ð±ÑаÑзеÑи дозволÑÑÑÑ Ñм вÑдклÑÑиÑи ÑÐ°ÐºÑ Ñайли cookie.
ÐÑÑм Ñого, деÑÐºÑ ÑÑÑаÑÐ½Ñ Ð±ÑаÑзеÑи запÑоваджÑÑÑÑ ÑпеÑÑалÑÐ½Ñ Ð¿Ð¾Ð»ÑÑÐ¸ÐºÑ Ð´Ð»Ñ ÑÐ°ÐºÐ¸Ñ ÑайлÑв cookie:
- Safari Ð²Ð·Ð°Ð³Ð°Ð»Ñ Ð½Ðµ дозволÑÑ ÑÑоÑÐ¾Ð½Ð½Ñ Ñайли cookie.
- У Firefox Ñ âÑоÑний ÑпиÑокâ ÑÑоÑоннÑÑ Ð´Ð¾Ð¼ÐµÐ½Ñв, з ÑÐºÐ¸Ñ Ð²Ñн блокÑÑ Ð½Ð°Ð´Ñ Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ ÑÑоÑоннÑÑ ÑайлÑв cookie.
ЯкÑо ми заванÑажимо ÑкÑÐ¸Ð¿Ñ Ð· ÑÑоÑоннÑого доменÑ, Ñакого Ñк <script src="https://google-analytics.com/analytics.js">, Ñ Ñей ÑкÑÐ¸Ð¿Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑÑ document.cookie Ñоб вÑÑановиÑи Ñайли cookie, Ñо вони не вважаÑимÑÑÑÑÑ ÑÑоÑоннÑми.
ЯкÑо ÑкÑÐ¸Ð¿Ñ Ð²ÑÑановлÑÑ Ñайл cookie, ÑÐ¾Ð´Ñ Ð½ÐµÐ²Ð°Ð¶Ð»Ð¸Ð²Ð¾ звÑдки заванÑажений Ñей ÑкÑÐ¸Ð¿Ñ â Ñайл cookie належиÑÑ Ð´Ð¾Ð¼ÐµÐ½Ñ Ð¿Ð¾ÑоÑного web-ÑайÑÑ.
ÐодаÑок: GDPR
Ð¦Ñ Ñема Ð²Ð·Ð°Ð³Ð°Ð»Ñ Ð½Ðµ повâÑзана з JavaScript, Ñе пÑоÑÑо поÑÑÑбно памâÑÑаÑи, налаÑÑовÑÑÑи Ñайли cookie.
У ÐвÑÐ¾Ð¿Ñ ÑÑнÑÑ Ð·Ð°ÐºÐ¾Ð½Ð¾Ð´Ð°Ð²ÑÑво пÑд Ð½Ð°Ð·Ð²Ð¾Ñ GDPR, Ñке вÑÑановлÑÑ Ð½Ð°Ð±ÑÑ Ð¿Ñавил Ð´Ð»Ñ Ð²ÐµÐ±ÑайÑÑв Ñодо поваги до конÑÑденÑÑйноÑÑÑ ÐºÐ¾ÑиÑÑÑваÑÑв. Ðдне з ÑÐ¸Ñ Ð¿Ñавил â вимагаÑи вÑд коÑиÑÑÑваÑа Ñвного Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ Ð½Ð° вÑдÑÑÐµÐ¶ÐµÐ½Ð½Ñ ÑайлÑв cookie.
ÐаÑважÑе, Ñо йдеÑÑÑÑ Ð»Ð¸Ñе пÑо вÑдÑÑеженнÑ/ÑденÑиÑÑкаÑÑÑ/авÑоÑизаÑÑÑ ÑайлÑв cookies.
ÐÑже, ÑкÑо ми вÑÑановлÑÑмо Ñайл cookie, Ñкий лиÑе збеÑÑÐ³Ð°Ñ Ð´ÐµÑÐºÑ ÑнÑоÑмаÑÑÑ, але не вÑдÑÑежÑÑ Ñа не ÑденÑиÑÑкÑÑ ÐºÐ¾ÑиÑÑÑваÑа, ми можемо Ñе зÑобиÑи.
Ðле ÑкÑо ми збиÑаÑмоÑÑ Ð²ÑÑановиÑи Ñайл cookie з даними аÑÑенÑиÑÑкаÑÑÑ Ð°Ð±Ð¾ ÑденÑиÑÑкаÑоÑом вÑдÑÑеженнÑ, коÑиÑÑÑÐ²Ð°Ñ Ð¿Ð¾Ð²Ð¸Ð½ÐµÐ½ дозволиÑи Ñе.
ÐазвиÑай, Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ GDPR web-ÑайÑами ÑеалÑзÑÑÑÑÑÑ Ð² Ð´Ð²Ð¾Ñ Ð²Ð°ÑÑанÑÐ°Ñ . Ðи, напевно, вже баÑили ÑÑ Ð¾Ð±Ð¸Ð´Ð²Ð° в меÑÐµÐ¶Ñ ÑнÑеÑнеÑ:
-
ЯкÑо вебÑÐ°Ð¹Ñ Ñ Ð¾Ñе вÑÑановиÑи вÑдÑÑежÑвалÑÐ½Ñ Ñайли cookie лиÑе Ð´Ð»Ñ Ð°ÑÑенÑиÑÑÐºÐ¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾ÑиÑÑÑваÑÑв.
ÐÐ»Ñ ÑÑого в ÑеÑÑÑÑаÑÑйнÑй ÑоÑÐ¼Ñ Ð¼Ð°Ñ Ð±ÑÑи пÑапоÑеÑÑ Ð½Ð° кÑÑÐ°Ð»Ñ âпÑийнÑÑи полÑÑÐ¸ÐºÑ ÐºÐ¾Ð½ÑÑденÑÑйноÑÑÑâ (Ñка опиÑÑÑ, Ñк викоÑиÑÑовÑÑÑÑÑÑ Ñайли cookie), коÑиÑÑÑÐ²Ð°Ñ Ð¿Ð¾Ð²Ð¸Ð½ÐµÐ½ вÑдмÑÑиÑи його, лиÑе ÑÐ¾Ð´Ñ Ð²ÐµÐ±ÑÐ°Ð¹Ñ Ð¼Ð¾Ð¶Ðµ вÑÑановлÑваÑи Ñайли cookie Ð´Ð»Ñ Ð°Ð²ÑоÑизаÑÑÑ.
-
ЯкÑо вебÑÐ°Ð¹Ñ Ñ Ð¾Ñе вÑÑановиÑи вÑдÑÑежÑвалÑÐ½Ñ Ñайли cookies Ð´Ð»Ñ Ð²ÑÑÑ .
Щоб зÑобиÑи Ñе законно, вебÑÐ°Ð¹Ñ Ð¿Ð¾ÐºÐ°Ð·ÑÑ ÑпливаÑÑе модалÑне вÑкно Ð´Ð»Ñ Ð½Ð¾Ð²Ð¸Ñ ÐºÐ¾ÑиÑÑÑваÑÑв Ñ Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ Ð²Ñд Ð½Ð¸Ñ Ð¿Ð¾Ð³Ð¾Ð´Ð¸ÑиÑÑ Ð½Ð° Ñайли cookie. Ð¢Ð¾Ð´Ñ Ð²ÐµÐ±ÑÐ°Ð¹Ñ Ð¼Ð¾Ð¶Ðµ вÑÑановлÑваÑи ÑÑ Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñи лÑдÑм баÑиÑи конÑенÑ. Ðле Ñе може ÑÑÑбÑваÑи Ð½Ð¾Ð²Ð¸Ñ Ð²ÑдвÑдÑваÑÑв. ÐÑÑ Ñо не лÑбиÑÑ Ð±Ð°ÑиÑи ÑÐ°ÐºÑ ÑпливаÑÑÑ Ð¼Ð¾Ð´Ð°Ð»ÑÐ½Ñ Ð²Ñкна, ÑÐºÑ Ð²Ð¸Ð¼Ð°Ð³Ð°ÑÑÑ Ð²Ð·Ð°ÑмодÑÑ, замÑÑÑÑ Ð¿ÐµÑеглÑÐ´Ñ ÐºÐ¾Ð½ÑенÑÑ. Ðле GDPR Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ ÑÑÑÐºÐ¾Ñ Ñгоди.
GDPR ÑÑоÑÑÑÑÑÑÑ Ð½Ðµ лиÑе ÑайлÑв cookie, а й ÑнÑÐ¸Ñ Ð¿Ð¸ÑанÑ, повâÑÐ·Ð°Ð½Ð¸Ñ Ñз конÑÑденÑÑйнÑÑÑÑ, але Ñе Ð²Ð¸Ñ Ð¾Ð´Ð¸ÑÑ Ð·Ð° Ñамки даного ÑоздÑлÑ.
ÐÑдÑÑмки
document.cookie забезпеÑÑÑ Ð´Ð¾ÑÑÑп до ÑайлÑв cookies
- ÐпеÑаÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð·Ð¼ÑнÑÑÑÑ Ð»Ð¸Ñе вказаний Ñайл cookie.
- ÐмâÑ Ñа знаÑÐµÐ½Ð½Ñ ÑÐ°Ð¹Ð»Ñ cookie Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð±ÑÑи закодованÑ.
- Ðдин Ñайл cookie не повинен пеÑевиÑÑваÑи 4кÐ, 20+ ÑайлÑв на один ÑÐ°Ð¹Ñ (залежно вÑд бÑаÑзеÑа).
ÐÑÑибÑÑи:
path=/, вÑÑановлÑÑ Ð¿Ð¾ÑоÑÐ½Ñ Ð°Ð´ÑеÑÑ Ñк Ñипове знаÑеннÑ, ÑобиÑÑ Ñайл cookie видимим лиÑе за Ð²ÐºÐ°Ð·Ð°Ð½Ð¾Ñ Ð°Ð´ÑеÑоÑ.domain=site.com, Ñипово Ñайли cookie Ð²Ð¸Ð´Ð¸Ð¼Ñ Ð»Ð¸Ñе на поÑоÑÐ½Ð¾Ð¼Ñ Ð´Ð¾Ð¼ÐµÐ½Ñ. ЯкÑо домен вказано Ñвно, Ñайли cookie ÑÑаÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ñ Ð½Ð° ÑÑоÑÑÐ½ÐºÐ°Ñ Ð¿ÑддоменÑ.expiresабоmax-ageзадаÑÑÑ ÐºÑнÑевий ÑеÑмÑн пÑидаÑноÑÑÑ ÑайлÑв cookie. Ðез Ð½Ð¸Ñ Ñайли cookie помиÑаÑÑÑ Ð²ÑдÑÐ°Ð·Ñ Ð¿ÑÑÐ»Ñ Ð·Ð°ÐºÑиÑÑÑ Ð²Ñкна бÑаÑзеÑа.secureÑобиÑÑ Ñайли cookie доÑÑÑпними лиÑе по HTTPS (HTTPS-only).samesiteзабоÑонÑÑ Ð±ÑаÑзеÑÑ Ð²ÑдпÑавлÑÑи Ñайли cookie Ñ Ð²ÑдповÑÐ´Ñ Ð½Ð° запиÑи ÑÐºÑ Ð½Ð°Ð´Ñ Ð¾Ð´ÑÑÑ Ð· зовнÑÑнÑого ÑайÑÑ. Це Ð´Ð¾Ð¿Ð¾Ð¼Ð°Ð³Ð°Ñ Ð·Ð°Ð¿Ð¾Ð±ÑгÑи XSRF-аÑакам.
ÐодаÑково:
- ÐÑаÑзеÑи можÑÑÑ Ð·Ð°Ð±Ð¾ÑонÑÑи ÑÑоÑÐ¾Ð½Ð½Ñ Ñайли cookie, напÑиклад Safari ÑобиÑÑ Ñе Ñипово. Також ведеÑÑÑÑ ÑобоÑа, Ñоб запÑовадиÑи Ñаке ж Ñ Ð² Chrome.
- ÐÑÑановлÑÑÑи вÑдÑÑежÑвалÑний Ñайл cookie Ð´Ð»Ñ Ð³ÑомадÑн ÐС, GDPR Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑваÑи дозвÑл.
ÐоменÑаÑÑ
<code>, Ð´Ð»Ñ ÐºÑлÑÐºÐ¾Ñ ÑÑдкÑв â обгоÑнÑÑÑ ÑÑ Ñегом<pre>, Ð´Ð»Ñ Ð¿Ð¾Ð½Ð°Ð´ 10 ÑÑдкÑв â викоÑиÑÑовÑйÑе пÑÑоÑниÑÑ (plnkr, jsbin, codepenâ¦)