← Назад к вопросам

Как запретить доступ клиента к 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 критична для безопасности

  1. Защита от XSS атак — даже если на сайт загружен вредоносный скрипт, он не может получить session cookie
  2. Защита от утечки данных — cookie не может быть отправлена на внешний сервер
  3. Невозможно изменить — только сервер может изменять 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:

  1. Откройте Application -> Cookies
  2. Найдите cookie
  3. Если есть галочка в колонке HttpOnly — доступ запрещен из JS

Обычные cookies (БЕЗ HttpOnly)

// На сервере БЕЗ флага HttpOnly
res.cookie('tracking', 'value123');

// На клиенте ВСЕ видит JavaScript
console.log(document.cookie);
// Вывод: "tracking=value123"

HttpOnly флаг — обязательная практика безопасности для session cookies и других чувствительных данных. Это минимальная защита против XSS атак.

Как запретить доступ клиента к Cookie? | PrepBro