Ответ
Secure - куки передаются только по HTTPS.
HttpOnly - запрещает доступ к кукам через JavaScript (защита от XSS).
SameSite - контролирует отправку куков с cross-site запросами:
Strict- только для своего сайтаLax(default) - разрешает с безопасными методами (GET)None- разрешает все (требуетSecure)
Пример:
// Установка защищённых куков
document.cookie = "session=abc123; Secure; HttpOnly; SameSite=Lax";
Дополнительно:
Domain- ограничивает доменPath- ограничивает путьExpires/Max-Age- управляют сроком жизни
Ответ 18+ 🔞
А, куки, блядь! Ну это ж классика, ёпта! Сейчас разжуем, как эти печеньки работают, чтобы тебя не сожрали по дороге.
Вот смотри, есть три главных приблуды, которые из говняной печеньки делают хоть какую-то защиту.
Первая — Secure. Это значит, что эту вкусняшку браузер пошлёт только если ты на безопасном канале, по HTTPS. То есть не по этой вашей открытой помойке, где каждый мудак может подсмотреть. Только по зашифрованному. Без этой штуки — всё, пиздец, ваши логины-пароли летят по ветру.
Вторая — HttpOnly. Вообще гениальная вещь, блядь! Ставишь эту галочку — и всё, твои куки становятся невидимыми для JavaScript. То есть какой-нибудь скрипт-вредитель, который влез на страницу через XSS, не сможет их украсть и сказать: «О, привет, я твой пользователь, ёбта!». Он их просто не увидит. Доступ только у сервера. Красота!
Ну и третья, модная нынче — SameSite. Это чтобы твои куки не шастали, куда не просят, на левые сайты. Тут три режима, как у утюга:
Strict— самый строгий, блядь. Куки пошлются ТОЛЬКО если запрос идёт с ТВОЕГО ЖЕ сайта. Даже если пользователь кликнул на ссылку с почты — нихуя, куки не поедут. Надёжно, но иногда неудобно.Lax— золотая середина (и по умолчанию сейчас). Разрешает отправить куки с безопасными GET-запросами (например, когда перешёл по ссылке), но блокирует их в POST-запросах или когда картинку с чужого сайта грузят. Самый частый выбор.None— «похуй, отправляй всё». Но чтобы выбрать эту опцию, ты ОБЯЗАН поставитьSecure, иначе браузер тебя пошлёт нахуй. Нужно для каких-нибудь кросс-доменных авторизаций, но осторожно, ёпта!
Вот как это в коде выглядит, смотри, не трогай, всё правильно:
// Установка защищённых куков
document.cookie = "session=abc123; Secure; HttpOnly; SameSite=Lax";
А, ну и ещё есть старые добрые прибамбасы, которые все знают, но забывают:
Domain— можешь указать, для какого домена кука. Если поставишь.example.com, то она будет и дляsite.example.com, и дляadmin.example.com. Хитро, блядь!Path— ограничивает путь./admin— значит, кука будет только когда юзер в админке шарится.ExpiresилиMax-Age— чтоб печенька не вечной была. Поставил дату — и через месяц она сдохнет сама. Или через час. Как захочешь.
Вот и вся магия, блядь. Казалось бы, мелочь, а без неё — как без штанов: и ходить можно, но все видят, что у тебя там.