Comment configurer l'utilisation des cookies HttpOnly en PHP
Question
Comment puis-je paramétrer les cookies dans mon PHP apps
comme HttpOnly cookies
?
La solution
- Pour vos cookies, voir cette réponse.
- Pour Le propre cookie de session de PHP (
PHPSESSID
, par défaut), voir La réponse de @richie
Le setcookie()
et setrawcookie()
fonctions, a introduit le httponly
paramètre, de retour dans les âges sombres de PHP 5.2.0, ce qui rend cela agréable et facile.Définissez simplement le 7ème paramètre sur true, selon la syntaxe
Syntaxe de fonction simplifiée par souci de concision
setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
setrawcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
Entrer NULL
pour les paramètres que vous souhaitez conserver par défaut.Vous voudrez peut-être également vous demander si vous devez définir le secure
paramètre.
Il est également possible d'utiliser l'ancienne version de niveau inférieur. header()
fonction:
header( "Set-Cookie: name=value; httpOnly" );
Autres conseils
Pour les propres cookies de session de PHP sur Apache :
ajoutez ceci à votre configuration Apache ou .htaccess
<IfModule php5_module>
php_flag session.cookie_httponly on
</IfModule>
Cela peut également être défini dans un script, à condition qu'il soit appelé avant session_start()
.
ini_set( 'session.cookie_httponly', 1 );
Sachez que HttpOnly n'arrête pas les scripts intersites ;au lieu de cela, il neutralise une attaque possible, et ne le fait actuellement que sur IE (FireFox expose les cookies HttpOnly dans XmlHttpRequest, et Safari ne l'honore pas du tout).Bien sûr, activez HttpOnly, mais ne perdez même pas une heure de filtrage de sortie et de tests de fuzz en échange.
Notez que les cookies de session PHP n'utilisent pas httponly
par défaut.
Pour faire ça:
$sess_name = session_name();
if (session_start()) {
setcookie($sess_name, session_id(), null, '/', null, null, true);
}
Quelques éléments à noter ici :
- Tu dois appeler
session_name()
avantsession_start()
- Cela définit également le chemin par défaut «/», ce qui est nécessaire pour l'opéra, mais les cookies de session PHP ne font pas non plus par défaut.
<?php
//None HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE);
//HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
?>
Explication ici d'Ilia...5.2 seulement cependant
httpUniquement prise en charge des indicateurs de cookies dans PHP 5.2
Comme indiqué dans cet article, vous pouvez définir vous-même l'en-tête dans les versions précédentes de PHP.
header("Set-Cookie: hidden=value; httpOnly");
Vous pouvez le préciser dans la fonction définir les cookies voir le manuel php
setcookie('Foo','Bar',0,'/', 'www.sample.com' , FALSE, TRUE);
Vous pouvez l'utiliser dans un fichier d'en-tête.
// setup session enviroment
ini_set('session.cookie_httponly',1);
ini_set('session.use_only_cookies',1);
De cette façon, tous les futurs cookies de session utiliseront http uniquement.
- Mis à jour.
La bonne syntaxe de la commande php_flag est
php_flag session.cookie_httponly On
Et soyez conscient, il suffit d'abord de répondre du serveur pour définir le cookie et ici (par exemple, vous pouvez voir la directive "HttpOnly".Donc, pour tester, supprimez les cookies du navigateur après chaque demande de test.