web-dev-qa-db-fra.com

Définissez httpOnly et sécurisez le cookie PHPSESSID dans PHP

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

27
Steve

À 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 ]]]] )
12
Johan
ini_set('session.cookie_httponly', 1);

plus d'informations ici sur les docs PHP

19
user2741089

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".

18
allieferr

J'utilise Apache httpd sur HTTPS, l'ensemble session.cookie_httponly = 1 & session.cookie_secure = 1 fonctionne pour moi.

2
hyjiacan

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

0
MarcoZen

Si vous utilisez Apache, essayez ceci sur votre .htaccess

php_value session.cookie_httponly 1
0
Trac Nguyen