← Назад к вопросам
Как запретить доступ клиента к Cookie?
2.3 Middle🔥 201 комментариев
#Браузер и сетевые технологии
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Флаг HttpOnly для защиты cookies
Для запрета доступа клиента к cookie из JavaScript используется флаг HttpOnly. Это флаг безопасности, который устанавливается на сервере при создании или обновлении cookie.
Установка флага HttpOnly на сервере
Когда сервер отправляет Set-Cookie заголовок, он может добавить флаг HttpOnly:
Set-Cookie: sessionId=abc123; HttpOnly; Path=/; SameSite=Strict
С флагом HttpOnly:
- Cookie автоматически отправляется в каждом HTTP запросе
- JavaScript код НИКАК не может получить доступ к этой cookie
- document.cookie не показывает эту cookie
Пример на Node.js/Express
app.get('/login', (req, res) => {
// Cookie установлена с флагом HttpOnly
res.cookie('sessionToken', 'token123', {
httpOnly: true, // Запретить доступ из JS
secure: true, // Только HTTPS
sameSite: 'strict', // CSRF защита
maxAge: 3600000 // 1 час
});
res.send('Logged in');
});
Пример на Python/Flask
from flask import Flask, request, make_response
@app.route('/login', methods=['POST'])
def login():
resp = make_response('Logged in')
# Установка HttpOnly cookie
resp.set_cookie(
'auth_token',
value='token123',
httponly=True, # Запретить доступ из JS
secure=True, # Только HTTPS
samesite='Strict', # CSRF защита
max_age=3600
)
return resp
Попытка доступа из JavaScript (НЕ СРАБОТАЕТ)
// Это НЕ покажет HttpOnly cookies
console.log(document.cookie);
// Вывод может содержать только обычные cookies
// Попытка создать HttpOnly cookie тоже не сработает
// (HttpOnly можно установить ТОЛЬКО на сервере)
document.cookie = 'sessionId=abc123; HttpOnly'; // Игнорируется
Все флаги безопасности cookies
Set-Cookie: sessionToken=abc123;
HttpOnly - Доступна только для HTTP (запрещает document.cookie)
Secure - Отправляется только по HTTPS
SameSite=Strict - Отправляется только для same-site запросов (CSRF защита)
Path=/ - Доступна только для пути /
Domain=.example.com - Доступна для поддоменов
Max-Age=3600 - Время жизни в секундах
Почему HttpOnly критична для безопасности
- Защита от XSS атак — даже если на сайт загружен вредоносный скрипт, он не может получить session cookie
- Защита от утечки данных — cookie не может быть отправлена на внешний сервер
- Невозможно изменить — только сервер может изменять HttpOnly cookies
Практический пример с fetch
// Клиент отправляет запрос
fetch('/api/user', {
credentials: 'include' // Отправляет ALL cookies (включая HttpOnly)
})
.then(r => r.json())
.then(data => console.log(data));
// HttpOnly cookie автоматически отправляется браузером
// но JavaScript не может её увидеть!
Проверка в DevTools
В Chrome DevTools:
- Откройте Application -> Cookies
- Найдите cookie
- Если есть галочка в колонке HttpOnly — доступ запрещен из JS
Обычные cookies (БЕЗ HttpOnly)
// На сервере БЕЗ флага HttpOnly
res.cookie('tracking', 'value123');
// На клиенте ВСЕ видит JavaScript
console.log(document.cookie);
// Вывод: "tracking=value123"
HttpOnly флаг — обязательная практика безопасности для session cookies и других чувствительных данных. Это минимальная защита против XSS атак.