Что такое атрибут HttpOnly у cookie?

Ответ

HttpOnly — это флаг (атрибут), который можно установить для HTTP-куки. Его основная цель — защита от краж сессионных идентификаторов через XSS-атаки (межсайтовый скриптинг).

Принцип работы:

  • Кука с атрибутом HttpOnly передается браузером на сервер и обратно только в заголовках HTTP-запросов.
  • Доступ к такой куке из JavaScript (через document.cookie) полностью блокируется. Даже если злоумышленник сможет внедрить вредоносный скрипт на страницу, он не сможет прочитать защищенную куку.

Пример заголовка Set-Cookie:

Set-Cookie: sessionid=abc123xyz; HttpOnly; Secure; SameSite=Strict

Важные моменты для тестирования безопасности:

  • Проверка: Убедиться, что критичные для аутентификации куки (например, sessionId, token) установлены с флагом HttpOnly.
  • Сочетание с другими атрибутами: HttpOnly не защищает от CSRF-атак, поэтому его необходимо использовать вместе с:
    • Secure — передача куки только по HTTPS.
    • SameSite — контроль отправки кук при межсайтовых запросах.
  • Инструменты проверки: Просмотр заголовков в DevTools (вкладка Network/Application) или использование сканеров безопасности.

Ответ 18+ 🔞

Давай разберем эту штуку про HttpOnly, а то звучит как какой-то заумный ритуал, а на деле всё просто и гениально, как удар кирпичом по яйцам.

Представь себе: у тебя есть печенька, ну, кука сессионная. Ты залогинился на сайте, и тебе выдали такую волшебную печенюху sessionId=abc123xyz. Пока она у тебя, ты — царь и бог на этом сайте.

Так вот, раньше, в дикие времена, эту печеньку мог сожрать любой пройдоха-скрипт, который влезет на страницу через XSS (это когда сайт, прости господи, пропускает чужой код). Скрипт этот, сука, просто читал document.cookie — и всё, твоя сессия у него в кармане. Красота? Пиздец.

А теперь смотри, какая хитрая жопа придумана. Ставим на куку флаг HttpOnly. И что происходит? А происходит магия!

Эта кука становится как бы невидимой и недоступной для всего JavaScript'а на странице. Вообще. Нахуй. Ты можешь хоть весь свой мозг вывернуть, пытаясь достучаться до неё через document.cookie — получишь пустоту или всё, кроме неё. Она теперь существует только на уровне браузера и сервера, в священных HTTP-заголовках.

То есть браузер её бережно хранит и автоматически, как преданный пес, подкладывает в каждый запрос к серверу. Но вытащить её обратно, чтобы посмотреть или скопировать, уже никак. Зловредный скрипт, даже если он пролез, утыкается в бетонную стену. Он может насадить сайту кучу пакостей, но украсть эту конкретную куку — уже нет. Ебушки-воробушки, да?

Вот как это выглядит в дикой природе, когда сервер тебе её выдает:

Set-Cookie: sessionid=abc123xyz; HttpOnly; Secure; SameSite=Strict

Видишь эту красоту? HttpOnly — это наш бронежилет от XSS-воришек. Secure — чтоб только по защищенному HTTPS таскалась, а не по голому HTTP, где её всякий прохожий может с перехватить. SameSite=Strict — это уже защита от других напастей, CSRF, чтобы куку не слали с левых сайтов.

Так что тебе, как тестеру или просто параноику, надо делать?

  1. Проверяй, блядь! Залезь в инструменты разработчика (F12), вкладка Network. Найди любой запрос к своему сайту, посмотри в Headers на ответ от сервера. Или во вкладке Application -> Cookies. Ищи свои главные куки (типа session, token, auth). Если они без HttpOnly — это не просто дыра, это широкие ворота для любого скрипт-кидди. Волнение ебать!
  2. Не верь в одну защиту. HttpOnly — это круто, но это не серебряная пуля. Без Secure на HTTP-сайте её всё равно перехватят. Без правильного SameSite тебя могут заставить сделать запрос с чужого сайта, и кука утечёт. Так что это всегда комплекс, пазл из нескольких фич.
  3. Юзай сканеры. Нормальные сканеры безопасности (типа Burp Suite, OWASP ZAP) эту хуйню видят сразу и кричат тебе: «Э, сабака, сука, тут кука без HttpOnly валяется!».

Короче, суть в том, чтобы отвязать критичные данные от JavaScript-окружения, где царит анархия и можно впендюрить любой код, и спрятать их в более защищенный слой браузера. Просто, как три копейки, но работает, блядь, на ура.