Comment puis-je définir les cookies dans mon PHP apps
as HttpOnly cookies
?
$cookie->setHttpOnly(true);
avec github.com/delight-im/PHP-Cookie
Comment puis-je définir les cookies dans mon PHP apps
as HttpOnly cookies
?
$cookie->setHttpOnly(true);
avec github.com/delight-im/PHP-Cookie
Réponses:
PHPSESSID
, par défaut), voir la réponse de @ richieLes fonctions setcookie()
et setrawcookie()
, ont introduit le httponly
paramètre, à l'époque sombre 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 la fonction simplifiée pour plus de brièveté
setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
setrawcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
Entrez NULL
pour les paramètres que vous souhaitez conserver par défaut. Vous voudrez peut-être également déterminer si vous devez définir le secure
paramètre.
Il est également possible d'utiliser l'ancienne header()
fonction de niveau inférieur :
header( "Set-Cookie: name=value; httpOnly" );
set_cookie
appel moins verbeux si nous n'avons pas besoin de définir les autres paramètres. Par exemple set_cookie($name, $value, httponly: true)
.
Pour les cookies de session 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é auparavant session_start()
.
ini_set( 'session.cookie_httponly', 1 );
php.ini
.
php_value
en php_flag
ne fonctionne pas. Je viens de l'essayer sur mon serveur ..
php_flag
vous passez à , vous devez également changer la valeur - soit soit on
soit off
- voir le manuel.
Notez que les cookies de session PHP ne sont pas utilisés httponly
par défaut.
Pour faire ça:
$sess_name = session_name();
if (session_start()) {
setcookie($sess_name, session_id(), null, '/', null, null, true);
}
Quelques points à noter ici:
session_name()
avantsession_start()
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'honorent pas du tout). Bien sûr, activez HttpOnly, mais ne perdez même pas une heure de filtrage de sortie et de test de fuzz dans le commerce pour cela.
Explication ici d'Ilia ... 5.2 seulement
Prise en charge de l'indicateur de cookie httpSeulement 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 spécifier dans la fonction set cookie 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 cookies de session futurs utiliseront httponly.
La bonne syntaxe de la commande php_flag est
php_flag session.cookie_httponly On
Et soyez conscient, juste la première réponse du serveur, définissez 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.
Une solution plus élégante depuis PHP> = 7.0
session_start(['cookie_lifetime' => 43200,'cookie_secure' => true,'cookie_httponly' => true]);