Je viens de recevoir les résultats d'un audit de sécurité - tout est clair sauf deux choses
Cookie de session sans drapeau http.
Cookie de session sans indicateur sécurisé défini.
L'application est codée en php et les suggestions de correction sont les suivantes:
J'ai regardé des exemples mais je ne comprends pas bien comment l'implémenter sur un serveur Linux. Je n'ai pas accès au fichier . Ini. Est-il possible de les définir dans le fichier htaccess?
Sinon, comment et où dois-je implémenter dans le code?
Puisque vous avez demandé .htaccess et que ce paramètre est PHP_INI_ALL , mettez-le simplement dans votre .htaccess:
php_value session.cookie_httponly 1
php_value session.cookie_secure 1
Notez que les cookies de session ne seront envoyés qu'avec https demandes après cela. Cela pourrait vous surprendre si vous perdez une session dans une page http non sécurisée (mais comme souligné dans les commentaires, c'est vraiment le point de la configuration en premier lieu ...).
Vous pouvez les définir avant d'envoyer l'en-tête. Ajoutez simplement ces lignes ci-dessous dans votre code.
<?php
// **PREVENTING SESSION HIJACKING**
// Prevents javascript XSS attacks aimed to steal the session ID
ini_set('session.cookie_httponly', 1);
// **PREVENTING SESSION FIXATION**
// Session ID cannot be passed through URLs
ini_set('session.use_only_cookies', 1);
// Uses a secure connection (HTTPS) if possible
ini_set('session.cookie_secure', 1);
Je sais que cela indique spécifiquement qu'ils n'ont pas accès au fichier .ini mais pour ceux qui arrivent ici via les résultats de recherche, les paramètres .ini ressemblent à:
session.cookie_httponly = 1
session.cookie_secure = 1
Le cookie_secure est déjà présent par défaut dans la plupart des fichiers ini mais mis en commentaire. Décommentez donc cette ligne et définissez le 1. La ligne httponly est également déjà présente mais pas mise en commentaire mais par défaut à 0. Vous devez donc la rechercher et la définir.