Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Флаг Secure в Cookie
Флаг Secure — это параметр при установке cookie, который гарантирует, что cookie будет передаваться только по HTTPS соединению, никогда по незащищённому HTTP. Это критическая мера безопасности для защиты authentication токенов и чувствительных данных.
Как работает Secure флаг?
Когда сервер устанавливает cookie с флагом Secure, браузер:
- Отправляет cookie только на HTTPS запросах
- Игнорирует попытки отправить cookie по HTTP
- Защищает от man-in-the-middle атак, когда перехватываются незащищённые каналы связи
Установка Secure флага на сервере
// Node.js с Express
res.cookie("sessionId", "token123", {
secure: true, // только HTTPS
httpOnly: true, // недоступна JavaScript (защита от XSS)
sameSite: "Strict" // защита от CSRF атак
});
// Результирующий HTTP Header:
// Set-Cookie: sessionId=token123; Secure; HttpOnly; SameSite=Strict
Почему это критично?
Сценарий БЕЗ Secure флага (уязвимо):
// Установка cookie
Set-Cookie: sessionId=abc123xyz; Path=/
// Проблема: Если пользователь подключен к открытой WiFi
// Атакующий может перехватить HTTP трафик и украсть sessionId
// Затем выдать себя за пользователя
С Secure флагом (защищено):
// Установка cookie
Set-Cookie: sessionId=abc123xyz; Secure; HttpOnly; Path=/
// Cookie отправляется ТОЛЬКО через HTTPS
// Даже если перехватить трафик, это зашифрованные данные
// sessionId невозможно украсть или подделать
Полный пример: Безопасная аутентификация
// Server-side (Node.js / Express)
app.post("/login", async (req, res) => {
const user = await authenticateUser(req.body);
if (!user) {
return res.status(401).json({ error: "Invalid credentials" });
}
const jwtToken = generateJWT(user.id, user.email);
// Устанавливаем secure cookie
res.cookie("authToken", jwtToken, {
secure: true, // ✅ Только HTTPS
httpOnly: true, // ✅ Недоступна JavaScript (защита от XSS)
sameSite: "Strict", // ✅ Защита от CSRF
maxAge: 3600000, // 1 час в миллисекундах
path: "/",
domain: ".example.com" // Ограничение домена
});
res.json({ message: "Logged in successfully" });
});
// Client-side (браузер)
// Cookie автоматически отправляется в каждом HTTPS запросе
fetch("https://api.example.com/profile", {
method: "GET",
credentials: "include" // Включаем cookies в запрос
})
.then(res => res.json())
.then(data => console.log("Profile:", data));
Какие флаги использовать вместе с Secure?
| Флаг | Применение | Защита от |
|---|---|---|
Secure | Только HTTPS | Перехват по HTTP (man-in-the-middle) |
HttpOnly | Недоступна JS | XSS атаки (кража через JavaScript) |
SameSite=Strict | Только same-site | CSRF атаки (подделка запросов) |
Max-Age | Время жизни | Неограниченный доступ |
Domain | Ограничение домена | Утечка на другие домены |
Как браузер обрабатывает Secure флаг?
// Находясь на https://example.com
// ✅ Запрос по HTTPS - cookie отправляется
fetch("https://example.com/api/data", { credentials: "include" });
// Request Header: Cookie: authToken=abc123xyz;
// ❌ Запрос по HTTP - cookie НЕ отправляется
fetch("http://example.com/api/data", { credentials: "include" });
// Request Header: Cookie: (пусто)
Локальная разработка
На localhost при разработке ты можешь отключить Secure флаг:
// Конфигурация для разработки и продакшена
res.cookie("token", jwtToken, {
secure: process.env.NODE_ENV === "production", // true только в prod
httpOnly: true,
sameSite: "Lax", // Lax более удобен для разработки
maxAge: 3600000
});
Запомни: Secure флаг — это базовый стандарт безопасности. В production ОБЯЗАТЕЛЬНО комбинируй его с HttpOnly и SameSite для максимальной защиты от распространённых веб-атак.