Come si imposta l'utilizzo dei cookie HttpOnly in PHP
Domanda
Come posso impostare i cookie nel mio file PHP apps
COME HttpOnly cookies
?
Soluzione
- Per i tuoi biscotti, vedi questa risposta.
- Per Cookie di sessione di PHP (
PHPSESSID
, per impostazione predefinita), vedere La risposta di @richie
IL setcookie()
E setrawcookie()
funzioni, ha introdotto il httponly
parametro, nei tempi bui di PHP 5.2.0, rendendolo semplice e piacevole.Imposta semplicemente il settimo parametro su true, come da sintassi
Sintassi della funzione semplificata per brevità
setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
setrawcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
accedere NULL
per i parametri che si desidera mantenere come predefiniti.Potresti anche considerare se dovresti impostare il file secure
parametro.
È anche possibile utilizzare il livello più vecchio e inferiore header()
funzione:
header( "Set-Cookie: name=value; httpOnly" );
Altri suggerimenti
Per i cookie di sessione di PHP su Apache:
aggiungilo alla tua configurazione Apache o .htaccess
<IfModule php5_module>
php_flag session.cookie_httponly on
</IfModule>
Questo può anche essere impostato all'interno di uno script, purché venga chiamato prima session_start()
.
ini_set( 'session.cookie_httponly', 1 );
Tieni presente che HttpOnly non interrompe lo scripting cross-site;invece, neutralizza un possibile attacco e attualmente lo fa solo su IE (FireFox espone i cookie HttpOnly in XmlHttpRequest e Safari non lo onora affatto).Sicuramente, attiva HttpOnly, ma non rinunciare nemmeno a un'ora di filtraggio dell'output e test fuzz in cambio di questo.
Tieni presente che i cookie di sessione PHP non utilizzano httponly
per impostazione predefinita.
Fare quello:
$sess_name = session_name();
if (session_start()) {
setcookie($sess_name, session_id(), null, '/', null, null, true);
}
Un paio di elementi degni di nota qui:
- Devi chiamare
session_name()
Primasession_start()
- Ciò imposta anche il percorso predefinito su '/', che è necessario per l'opera ma che i cookie di sessione PHP non fanno neanche per impostazione predefinita.
<?php
//None HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE);
//HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
?>
Spiegazione qui da Ilia...Solo 5.2 però
Supporto del flag cookie httpOnly in PHP 5.2
Come affermato in quell'articolo, puoi impostare tu stesso l'intestazione nelle versioni precedenti di PHP
header("Set-Cookie: hidden=value; httpOnly");
Puoi specificarlo nella funzione imposta cookie vedere il manuale php
setcookie('Foo','Bar',0,'/', 'www.sample.com' , FALSE, TRUE);
Puoi usarlo in un file di intestazione.
// setup session enviroment
ini_set('session.cookie_httponly',1);
ini_set('session.use_only_cookies',1);
In questo modo tutti i cookie di sessione futuri utilizzeranno solo http.
- Aggiornato.
La sintassi corretta del comando php_flag è
php_flag session.cookie_httponly On
E attenzione, basta prima rispondere dal server impostare il cookie e qui (ad esempio puoi vedere la direttiva "HttpOnly".Quindi, per testare, elimina i cookie dal browser dopo ogni richiesta di test.