Wie richte ich die Verwendung von HttpOnly-Cookies in PHP ein?


92

Wie kann ich die Cookies in meinem PHP appsas setzen HttpOnly cookies?


stackoverflow.com/questions/528405/… Hat Informationen zur Browserunterstützung.
Kzqai

2
@Tchalvak Nein, die aktuellen Antworten sind noch maßgebend. Seit 2008 hat sich nichts an der Einstellung von HTTP-Cookies in PHP geändert. Welche Browser nur HTTP-Cookies unterstützen, ist eine andere Frage mit einer anderen Antwort.
Lanzz

Sie können $cookie->setHttpOnly(true);mit github.com/delight-im/PHP-Cookie
caw

Antworten:


92

Die setcookie()und setrawcookie()-Funktionen führten den httponlyParameter in den dunklen Zeiten von PHP 5.2.0 ein und machten dies schön und einfach. Setzen Sie einfach den 7. Parameter gemäß der Syntax auf true

Funktionssyntax der Kürze halber vereinfacht

setcookie(    $name, $value, $expire, $path, $domain, $secure, $httponly )
setrawcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )

Geben NULLSie die Parameter ein, die Sie als Standard beibehalten möchten. Möglicherweise möchten Sie auch überlegen, ob Sie den secureParameter einstellen sollten .

Es ist auch möglich, die ältere header()Funktion auf niedrigerer Ebene zu verwenden:

header( "Set-Cookie: name=value; httpOnly" );

119

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 festgelegt werden, sofern es zuvor aufgerufen wurde session_start().

ini_set( 'session.cookie_httponly', 1 );

9
+1, da dies eine gute Sache (aus Sicherheitsgründen) ist, die auf Ihrem gesamten Server vorhanden ist, aber stattdessen zum hinzugefügt wird php.ini.
Anthony Hatzopoulos

10
Bitte beachten Sie, dass stattdessen php_flag verwendet werden sollte: "Verwenden Sie php_value nicht zum Festlegen von Booleschen Werten. Stattdessen sollte php_flag verwendet werden." php.net/manual/en/configuration.changes.php
Ondrej Machulda

@OndrejMachulda Das Wechseln php_valuezu php_flagfunktioniert funktioniert nicht. Ich habe es gerade auf meinem Server versucht ..
Nate

6
@Nate: Wenn Sie zu ändern php_flag, müssen Sie auch den Wert ändern - entweder onoder off- siehe Handbuch.
Ondrej Machulda

14

Beachten Sie, dass PHP-Sitzungscookies httponlystandardmäßig nicht verwendet werden.

Das zu tun:

$sess_name = session_name();
if (session_start()) {
    setcookie($sess_name, session_id(), null, '/', null, null, true);
}

Einige wichtige Punkte hier:

  • Sie müssen session_name() vorher anrufensession_start()
  • Dadurch wird auch der Standardpfad auf '/' gesetzt, was für Opera erforderlich ist, PHP-Sitzungscookies jedoch standardmäßig auch nicht.

11
php.net/manual/en/function.session-set-cookie-params.php Dies kann automatisch über die oben genannte PHP-Funktion anstelle der benutzerdefinierten Codierung erfolgen.
Ryaner

13

Beachten Sie, dass HttpOnly das Cross-Site-Scripting nicht beendet. Stattdessen wird ein möglicher Angriff neutralisiert, und dies geschieht derzeit nur im Internet Explorer (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 nicht einmal eine Stunde Ausgabefilterung und Fuzz-Tests im Handel dafür fallen.


13
Diese Situation hat sich möglicherweise seit '08 geändert. Hier ist eine aktuellere / aktualisierte Liste: stackoverflow.com/questions/528405/…
Kzqai

7
<?php
//None HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE); 

//HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE); 

?>

Quelle




4

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.

2
Nur FYI session.use_only_cookies ist standardmäßig in PHP> 5.3
Nic Cottrell

1
und richtig ist, dass "alle zukünftigen Sitzungscookies " nur http, nur benutzerdefinierte verwenden ...
qdev

2

Die richtige Syntax des Befehls php_flag lautet

php_flag  session.cookie_httponly On

Und seien Sie sich bewusst, setzen Sie einfach zuerst die Antwort vom Server und setzen Sie das Cookie und hier (zum Beispiel können Sie die Anweisung "HttpOnly" sehen. Zum Testen löschen Sie Cookies nach jeder Testanforderung aus dem Browser.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.