Quelle est la méthode recommandée pour définir les indicateurs httponly et secure sur le cookie PHPSESSID?
J'ai trouvé http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-httponly . De meilleures suggestions?
merci
À 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 ]]]] )
ini_set('session.cookie_httponly', 1);
plus d'informations ici sur les docs PHP
Je ne pouvais pas utiliser le drapeau sécurisé avec session_set_cookie_params(...)
; ce que j’ai fait, c’est que, après que session_start()
ait défini le cookie PHPSESSID, je l’ai réinitialisé avec setcookie(...)
. Le paramètre final, true, attribue au cookie 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é "Envoyer pour" était définie sur "Connexions cryptées uniquement" et sa propriété "Expire" sur "À la fin de la session".
J'utilise Apache httpd sur HTTPS, l'ensemble session.cookie_httponly = 1
& session.cookie_secure = 1
fonctionne pour moi.
Utiliser .htaccess à cette fin ne fait que ralentir votre application.
Je pense qu'il vaut mieux ajouter cet extrait dans votre fichier de configuration principal (exemple config.php) ou votre fichier d'inclusion principal (exemple global.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: //, alors faites aussi
// Uses a secure connection (HTTPS)
ini_set('session.cookie_secure', 1);
Cette méthode est aussi appropriée pour ceux qui n'ont pas accès à php.ini
Si vous utilisez Apache, essayez ceci sur votre .htaccess
php_value session.cookie_httponly 1