Définissez httpOnly et sécurisez sur le cookie PHPSESSID en PHP
Quelle est la méthode recommandée pour définir httponly et sécuriser les indicateurs sur le cookie PHPSESSID?
J'ai trouvé http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-httponly . de meilleures suggestions?
Merci
6 réponses
, À mon avis, le mieux serait: http://www.php.net/manual/en/function.session-set-cookie-params.php
void session_set_cookie_params ( int $lifetime [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]] )
Je n'ai pas pu faire fonctionner le drapeau sécurisé avec session_set_cookie_params(...)
, donc ce que j'ai fait, c'est qu'après session_start()
avoir défini le cookie PHPSESSID, Je l'ai réinitialisé avec setcookie(...)
. Le paramètre final, true, fait que le cookie a un indicateur sécurisé.
<?php
session_start();
$currentCookieParams = session_get_cookie_params();
$sidvalue = session_id();
setcookie(
'PHPSESSID',//name
$sidvalue,//value
0,//expires at end of session
$currentCookieParams['path'],//path
$currentCookieParams['domain'],//domain
true //secure
);
?>
Lorsque j'ai vérifié le cookie PHPSESSID dans Firefox, sa propriété 'Send for' était définie sur 'encrypted connections only' et sa propriété 'Expires' était définie sur 'At end of session'.
ini_set('session.cookie_httponly', 1);
Plus d'informations ici sur les docs PHP
J'utilise Apache httpd sur HTTPS, set session.cookie_httponly = 1
& session.cookie_secure = 1
ça marche pour moi.
Si vous utilisez Apache, essayez ceci sur votre .htaccess
php_value session.cookie_httponly 1
En utilisant .htaccess à cet effet ralentit simplement votre application.
Je pense qu'il vaut mieux ajouter cet extrait dans votre fichier de configuration principal ( exemple de configuration.php ) ou d'inclure le fichier ( exemple mondial.php)
// Prevents javascript XSS attacks aimed to steal the session ID
ini_set('session.cookie_httponly', 1);
// Prevent Session ID from being passed through URLs
ini_set('session.use_only_cookies', 1);
Si vous utilisez https:// au lieu de http://, faites aussi
// Uses a secure connection (HTTPS)
ini_set('session.cookie_secure', 1);
Cette méthode convient également à ceux qui n'ont pas accès à php.ini