Question

Comment puis-je paramétrer les cookies dans mon PHP apps comme HttpOnly cookies?

Était-ce utile?

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()avant session_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); 

?>

Source

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top