Wie richten Sie die Verwendung von HttpOnly-Cookies in PHP ein?
Frage
Wie kann ich die Cookies in meinem setzen? PHP apps
als HttpOnly cookies
?
Lösung
- Für Deine Kekse, siehe diese Antwort.
- Für PHPs eigenes Sitzungscookie (
PHPSESSID
, standardmäßig), siehe @richies Antwort
Der setcookie()
Und setrawcookie()
Funktionen, eingeführt die httponly
Parameter, damals in den dunklen Zeiten von PHP 5.2.0, was dies schön und einfach macht.Setzen Sie einfach den 7. Parameter gemäß der Syntax auf true
Der Kürze halber wurde die Funktionssyntax vereinfacht
setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
setrawcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
Eingeben NULL
für Parameter, die Sie als Standard beibehalten möchten.Möglicherweise möchten Sie auch überlegen, ob Sie das festlegen sollten secure
Parameter.
Es ist auch möglich, die ältere, niedrigere Ebene zu verwenden header()
Funktion:
header( "Set-Cookie: name=value; httpOnly" );
Andere Tipps
Für PHP-eigene Sitzungscookies auf Apache:
Fügen Sie dies Ihrer Apache-Konfiguration hinzu oder .htaccess
<IfModule php5_module>
php_flag session.cookie_httponly on
</IfModule>
Dies kann auch innerhalb eines Skripts eingestellt werden, sofern es vorher aufgerufen wird session_start()
.
ini_set( 'session.cookie_httponly', 1 );
Beachten Sie, dass HttpOnly Cross-Site-Scripting nicht stoppt;Stattdessen neutralisiert es einen möglichen Angriff und führt dies derzeit nur im IE durch (FireFox macht HttpOnly-Cookies in XmlHttpRequest verfügbar und Safari berücksichtigt dies überhaupt nicht).Schalten Sie auf jeden Fall HttpOnly ein, aber lassen Sie dafür nicht einmal eine Stunde Ausgabefilterung und Fuzz-Tests auf sich warten.
Beachten Sie, dass PHP-Sitzungscookies nicht verwendet werden httponly
standardmäßig.
Das zu tun:
$sess_name = session_name();
if (session_start()) {
setcookie($sess_name, session_id(), null, '/', null, null, true);
}
Hier ein paar Anmerkungen:
- Du musst anrufen
session_name()
Vorsession_start()
- Dies legt auch den Standardpfad zu '/' fest, der für die Opera erforderlich ist, die PHP -Sitzungs -Cookies jedoch auch standardmäßig nicht tun.
<?php
//None HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE);
//HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
?>
Erklärung hier von Ilia...Allerdings nur 5,2
httpNur Cookie-Flag-Unterstützung in PHP 5.2
Wie in diesem Artikel erwähnt, können Sie den Header in früheren PHP-Versionen selbst festlegen
header("Set-Cookie: hidden=value; httpOnly");
Sie können es in der Funktion „Cookie setzen“ angeben siehe PHP-Handbuch
setcookie('Foo','Bar',0,'/', 'www.sample.com' , FALSE, TRUE);
Sie können dies in einer Header-Datei verwenden.
// setup session enviroment
ini_set('session.cookie_httponly',1);
ini_set('session.use_only_cookies',1);
Auf diese Weise verwenden alle zukünftigen Sitzungscookies nur http.
- Aktualisiert.
Die richtige Syntax des Befehls php_flag lautet
php_flag session.cookie_httponly On
Und beachten Sie, dass nur die erste Antwort des Servers das Cookie setzt und hier (zum Beispiel) die Anweisung „HttpOnly“ sehen kann.Löschen Sie daher zum Testen nach jeder Testanfrage Cookies aus dem Browser.