Guide · 3 min de lecture

Secure, HttpOnly et SameSite : corriger les attributs des cookies

En bref : les cookies de session et de connexion doivent avoir Secure (envoyés uniquement en HTTPS), HttpOnly (illisibles par JavaScript, ce qui limite les dégâts d’une faille XSS) et SameSite=Lax ou Strict (non envoyés sur la plupart des requêtes intersites, ce qui aide contre le CSRF). Définissez-les là où le cookie est créé, ou ajoutez-les au niveau du serveur web en solution de repli.

Mis à jour le · HackGrade

Le code et la configuration restent en anglais.

Voyez ce que votre site envoie

Terminal
curl -sI https://yourdomain.com | grep -i '^set-cookie'

Sessions PHP

php.ini
session.cookie_secure = 1
session.cookie_httponly = 1
session.cookie_samesite = "Lax"
PHP 7.3+
setcookie('name', $value, [
    'expires'  => time() + 3600,
    'path'     => '/',
    'secure'   => true,
    'httponly' => true,
    'samesite' => 'Lax',
]);

WordPress

Les cookies de connexion de WordPress sont déjà HttpOnly. Assurez-vous que l’administration est uniquement en HTTPS pour qu’ils soient aussi Secure :

wp-config.php
define( 'FORCE_SSL_ADMIN', true );

Les cookies créés par les extensions dépendent de chaque extension. S’il manque des attributs à l’un d’eux, cherchez une mise à jour ou utilisez la solution de repli côté serveur ci-dessous.

nginx (en reverse proxy)

nginx 1.19.3+
proxy_cookie_flags ~ secure httponly samesite=lax;

Apache

Apache mod_headers
Header edit Set-Cookie "^((?!.*;\s*Secure).*)$" "$1; Secure"
Header edit Set-Cookie "^((?!.*;\s*HttpOnly).*)$" "$1; HttpOnly"
Header edit Set-Cookie "^((?!.*;\s*SameSite).*)$" "$1; SameSite=Lax"

Si les cookies viennent d’un backend derrière un proxy (par exemple PHP-FPM derrière ProxyPass) et que rien ne change, utilisez plutôt Header always edit.

Ne rien casser

  • Les cookies que votre propre JavaScript doit lire (certains bandeaux de consentement, tests A/B) ne peuvent pas être HttpOnly.
  • SameSite=None est nécessaire pour les cookies utilisés dans des iframes tierces, et il exige Secure.
  • SameSite=Strict peut déconnecter les utilisateurs qui arrivent depuis un lien dans un e-mail. Lax est le choix par défaut le plus sûr.

Questions fréquentes

Les cookies d’analyse ont-ils besoin de ces attributs ?

Secure, oui, sur un site HTTPS. HttpOnly seulement si aucun script n’a besoin de les lire, ce qui est rarement le cas pour l’analyse d’audience.

SameSite=Lax suffit-il contre le CSRF ?

Il bloque la plupart des envois de formulaires intersites, mais les formulaires qui modifient des données doivent quand même utiliser des jetons CSRF.

Pourquoi un scanner signale-t-il encore un attribut manquant après ma correction ?

Souvent, un cache de pages ou un CDN sert l’ancienne réponse, ou une extension crée son propre cookie. Videz le cache et revérifiez les lignes Set-Cookie.

Sources

Guides associés

Gratuit · Immédiat · Sans inscription

Découvrez votre note avant quelqu’un d’autre.

Analyse passive. Rien n’est attaqué sans votre autorisation.

Gratuit pour commencer. Offres payantes dès 12 $ par mois, ou un rapport unique à 29 $. Voir les tarifs