Cookie sesyjne nie ma flagi Secure
Co to jest
Twoja strona ustawia cookie (zazwyczaj PHPSESSID, laravel_session, _ga itd.) bez flagi Secure. Przeglądarka będzie je wysyłać także przez nieszyfrowane HTTP, kiedy tylko nadarzy się okazja.
Dlaczego to problem
Atakujący, który ma dostęp do sieci między Tobą a użytkownikiem (Wi-Fi w kawiarni, skompromitowany router, dostawca internetu w kraju z aktywną inwigilacją), może:
- Podsłuchać cookie i przejąć sesję.
- Zmusić przeglądarkę do odwiedzenia
http://example.czprzez niezwiązany odnośnik HTTP i tam przechwycić cookie.
Nawet jeśli masz HTTPS wszędzie, bez Secure wystarczy, by użytkownik miał w innej karcie otwartą dowolną stronę HTTP w tej samej domenie, a cookie wycieknie.
Jak to naprawić
Celem jest ustawienie wszystkich trzech flag bezpieczeństwa: Secure, HttpOnly oraz SameSite.
Cookies sesyjne (najważniejsze)
PHP:
# php.ini (nebo .htaccess s php_value)
session.cookie_secure = 1
session.cookie_httponly = 1
session.cookie_samesite = "Lax"Node.js (express-session):
app.use(session({
secret: process.env.SESSION_SECRET,
cookie: {
secure: true,
httpOnly: true,
sameSite: 'lax',
maxAge: 1000 * 60 * 60 * 24,
}
}));Laravel (config/session.php):
'secure' => true,
'http_only' => true,
'same_site' => 'lax',WordPress: WordPress obsługuje sesję przez cookies, ale nie dodaje Secure automatycznie. Użyj wtyczki Cookies Flags albo dodaj ręcznie:
// wp-config.php
define('COOKIE_DOMAIN', '.example.cz');
@ini_set('session.cookie_secure', 1);
// functions.php
add_action('init', function () {
if (!is_ssl()) return;
foreach ($_COOKIE as $name => $val) {
setcookie($name, $val, [
'expires' => 0,
'path' => '/',
'secure' => true,
'httponly' => true,
'samesite' => 'Lax',
]);
}
});Cookies stron trzecich (analityka, retargeting)
Cookies ustawiane przez strony trzecie (Google Analytics, _fbp itd.) nie są pod Twoją kontrolą. Upewnij się przynajmniej, że ustawiasz je na stronie https:// — strona trzecia domyślnie doda wtedy flagę Secure.
Weryfikacja
DevTools → Application → Cookies. Spójrz na kolumnę Secure — powinna mieć wartość true dla wszystkich cookies, które niosą jakiekolwiek uwierzytelnienie.