@Tchalvak Non, les réponses actuelles font toujours autorité. Rien n'a changé depuis 2008 concernant la configuration des cookies HTTP uniquement en PHP. La question de savoir quels navigateurs prennent en charge les cookies HTTP uniquement est une question différente, avec une réponse différente.
Les fonctions setcookie()et setrawcookie(), ont introduit le httponlyparamè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é
Entrez NULLpour les paramètres que vous souhaitez conserver par défaut. Vous voudrez peut-être également déterminer si vous devez définir le secureparamètre.
Il est également possible d'utiliser l'ancienne header()fonction de niveau inférieur :
Avec les paramètres nommés de PHP 8, nous pourrons enfin rendre l' set_cookieappel moins verbeux si nous n'avons pas besoin de définir les autres paramètres. Par exemple set_cookie($name, $value, httponly: true).
Sygmoral
120
Pour les cookies de session PHP sur Apache:
ajoutez ceci à votre configuration Apache ou.htaccess
<IfModulephp5_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().
+1 car c'est une bonne chose (pour la sécurité) d'avoir en place sur l'ensemble de votre serveur, mais plutôt ajouté au php.ini.
Anthony Hatzopoulos
10
Veuillez noter que php_flag doit être utilisé à la place: "N'utilisez pas php_value pour définir des valeurs booléennes. Php_flag doit être utilisé à la place." php.net/manual/en/configuration.changes.php
Ondrej Machulda
@OndrejMachulda Le changement php_valueen php_flagne fonctionne pas. Je viens de l'essayer sur mon serveur ..
Nate
6
@Nate: Lorsque php_flagvous passez à , vous devez également changer la valeur - soit soit onsoit off- voir le manuel.
Ondrej Machulda
14
Notez que les cookies de session PHP ne sont pas utilisés httponlypar défaut.
Cela définit également le chemin par défaut sur «/», ce qui est nécessaire pour Opera mais que les cookies de session PHP ne font pas non plus par défaut.
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.
Juste pour info session.use_only_cookies est activé par défaut dans PHP> 5.3
Nic Cottrell
1
et il est correct que "tous les cookies de session futurs " utiliseront httponly, pas des cookies personnalisés ...
qdev
2
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.
$cookie->setHttpOnly(true);
avec github.com/delight-im/PHP-CookieRéponses:
PHPSESSID
, par défaut), voir la réponse de @ richieLes fonctions
setcookie()
etsetrawcookie()
, ont introduit lehttponly
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 syntaxeSyntaxe de la fonction simplifiée pour plus de brièveté
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 lesecure
paramètre.Il est également possible d'utiliser l'ancienne
header()
fonction de niveau inférieur :la source
set_cookie
appel moins verbeux si nous n'avons pas besoin de définir les autres paramètres. Par exempleset_cookie($name, $value, httponly: true)
.Pour les cookies de session PHP sur Apache:
ajoutez ceci à votre configuration Apache ou
.htaccess
Cela peut également être défini dans un script, à condition qu'il soit appelé auparavant
session_start()
.la source
php.ini
.php_value
enphp_flag
ne fonctionne pas. Je viens de l'essayer sur mon serveur ..php_flag
vous passez à , vous devez également changer la valeur - soit soiton
soitoff
- voir le manuel.Notez que les cookies de session PHP ne sont pas utilisés
httponly
par défaut.Pour faire ça:
Quelques points à noter ici:
session_name()
avantsession_start()
la source
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.
la source
La source
la source
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
la source
Vous pouvez le spécifier dans la fonction set cookie voir le manuel php
la source
Vous pouvez l'utiliser dans un fichier d'en-tête.
De cette façon, tous les cookies de session futurs utiliseront httponly.
la source
La bonne syntaxe de la commande php_flag est
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.
la source
Une solution plus élégante depuis PHP> = 7.0
session_start
options de session_start
la source