Накратко
HTTP бисквитките позволяват на сайта да свързва отделни заявки. Атрибутите Secure, HttpOnly и SameSite управляват различни аспекти на изпращането и достъпа до тях.
Полезно е да знаеш
Браузърната бисквитка е малка стойност, която браузърът съхранява и изпраща при подходящи последващи заявки. Така сайтът може да разпознае например определена сесия или запомнен избор. Това не означава, че цялата информация за профила се намира в бисквитката. Често тя съдържа само идентификатор, чрез който сървърът намира останалите данни. Разликата е важна: малък низ в браузъра може да има голямо значение за достъпа, без сам по себе си да прилича на парола. [1]
Сървърът задава бисквитката чрез заглавката Set-Cookie. По-късно браузърът я връща чрез Cookie, ако заявката отговаря на приложимите условия. Срокът може да бъде указан с Max-Age или Expires. Без такъв срок бисквитката обичайно е сесийна, но възстановяването на браузърна сесия може да възстанови и нея. Затова „ще изчезне непременно при затваряне на прозореца“ не е достатъчно надеждно предположение при проектиране на излизането от потребителски профил. [1, 2]
Атрибутът Secure ограничава изпращането до защитена връзка, с особености за локална разработка. HttpOnly не позволява бисквитката да бъде прочетена през JavaScript интерфейса document.cookie. Това са различни защити. Едната се отнася до преноса, а другата — до достъпа от скрипт. HttpOnly не забранява на браузъра да изпраща бисквитката при подходяща заявка, направена чрез JavaScript. Следователно атрибутът намалява конкретен риск, но не превръща уязвима страница в безопасна само с едно име в конфигурацията. [2]
SameSite управлява изпращането в контекст на заявки между сайтове. Стойностите Strict, Lax и None имат различно поведение; None изисква и Secure. Подходящият избор зависи от действителния поток, например отваряне на връзка, вградена услуга или външен процес за вход. При промяна е важно да се проверят тези сценарии. Най-строгата възможна стойност не е автоматично правилна за всяко приложение, ако тя прекъсва необходим и правилно защитен потребителски процес. [2]
От гледна точка на скриптовете document.cookie има още особености. Четенето връща достъпните бисквитки като низ, а присвояването обичайно задава отделна бисквитка, вместо да замени целия списък. Достъпът е синхронен и може да има цена за производителността. Има и асинхронен Cookie Store API за подходящите среди. Това е причина кодът да не чете бисквитките без нужда във всяка често изпълнявана операция. Удобният интерфейс не означава, че достъпът до съхраненото състояние е безплатен. [3]
Полезен пример е функцията „запомни избрания език“. Тя има различна чувствителност и различен срок от бисквитката за административен вход. Ако двете получат еднакви настройки по навик, може да се изгуби важна разлика между предпочитание и удостоверяване. При преглед на системата е добре за всяка бисквитка да има ясен отговор какво означава, кой трябва да я чете и кога трябва да престане да действа. Така настройките следват предназначението на данните, вместо да бъдат случайна комбинация от атрибути.
Източници
За повече подробности и проверка на информацията: