2008-08-31 11 views
78

Wie kann ich die Cookies in meiner PHP apps als HttpOnly cookies setzen?Wie richte ich HttpOnly Cookies in PHP ein?

+0

http://StackOverflow.com/Questions/528405/which-browsers-do-support-httponly-cookies Hat die Browser-Support-Info – Kzqai

+2

@Tchalvak Nein, die aktuellen Antworten sind immer noch autoritativ Nichts hat sich seit 2008 in Bezug auf die HTTP-only-Cookie-Einstellung in PHP geändert. _Welche Browser HTTP unterstützen - nur Cookies_ sind anders Frage, mit einer anderen Antwort. – lanzz

+0

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

Antwort

75
  • Für Cookies finden diese Antwort.
  • Für eigenen Session-Cookie PHP (PHPSESSID standardmäßig aktiviert), @richie's answer

Die setcookie() und setrawcookie() Funktionen eingeführt, um die httponly Parameter, zurück in den dunklen Zeiten der PHP 5.2.0, so dass diese schön sehen Und einfach. Setzen Sie einfach als Standard den 7. Parameter auf true, gemäß der Syntax

Funktionssyntax der Kürze halber vereinfacht

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

Geben Sie NULL für Parameter, die Sie wollen bleiben. Sie sollten auch überlegen, ob Sie den Parameter secure einstellen sollten.

Es ist auch möglich, mit der älteren, unterer Ebene header() Funktion:

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

Erklärung hier aus Ilia ... 5.2 nur wenn

httpOnly cookie flag support in PHP 5.2

Wie in diesem Artikel erwähnt, können Sie den Header selbst in früheren Versionen von PHP gesetzt

header("Set-Cookie: hidden=value; httpOnly"); 
4
<?php 
//None HttpOnly cookie: 
setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE); 

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

?> 

Source

5

Sie können angeben es in der Menge Cookie-Funktion see the php manual

setcookie('Foo','Bar',0,'/', 'www.sample.com' , FALSE, TRUE); 
13

Beachten Sie, dass Httponly nicht Cross-Site-Scripting nicht zu stoppen; Stattdessen neutralisiert es einen möglichen Angriff und macht dies derzeit nur im IE (FireFox macht HttpOnly-Cookies in XmlHttpRequest verfügbar, und Safari berücksichtigt sie überhaupt nicht). Auf jeden Fall schalten Sie HttpOnly ein, lassen Sie aber nicht einmal eine Stunde Output-Filterung und Fuzz-Tests in Kauf.

+12

Diese Situation kann sich seit '08 jetzt geändert haben. Hier ist eine aktuelle/aktualisierte Liste: http://stackoverflow.com/questions/528405/which-browsers-do-support-httponly-cookies – Kzqai

+0

Ich möchte wirklich meinen Downvote entfernen. –

9

Beachten Sie, dass PHP-Sitzungscookies httponly standardmäßig nicht verwenden.

, das zu tun:

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

Ein paar weitere Anmerkungen hier:

  • Sie haben auch ‚zu setzt den Standardpfad Dieser session_name() vor session_start()
  • anrufen/', die ist für Opera erforderlich, aber die PHP Session-Cookies tun standardmäßig nicht entweder.
+11

http://php.net/manual/en/function.session-set-cookie-params.php Es kann automatisch über die oben genannte PHP-Funktion statt benutzerdefinierte Codierung erfolgen. – Ryaner

87

Für PHP eigene Session-Cookies auf Apache:
fügen Sie diese zu Ihrer Apache-Konfiguration oder .htaccess

<IfModule php5_module> 
    php_flag session.cookie_httponly on 
</IfModule> 

Dies kann auch in einem Skript festgelegt werden, solange es vor session_start() genannt wird.

ini_set('session.cookie_httponly', 1); 
+9

+1, da dies eine gute Sache (für die Sicherheit) ist, die auf Ihrem gesamten Server vorhanden ist, aber stattdessen zur 'php.ini' hinzugefügt wurde. –

+8

Bitte beachten Sie, dass stattdessen php_flag verwendet werden sollte: "Verwenden Sie nicht php_value, um boolesche Werte zu setzen. Stattdessen sollte php_flag verwendet werden." http://php.net/manual/en/configuration.changes.php –

+0

@OndrejMachulda Das Ändern von 'php_value' auf' php_flag' funktioniert nicht. Ich habe es gerade auf meinem Server versucht. – Nate

3

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); 

So verwenden alle zukünftigen Cookies httponly.

+0

Just FYI session.use_only_cookies ist standardmäßig in PHP> 5.3 –

+0

und richtig ist "alle zukünftigen ** Sitzung ** Cookies" verwenden httponly, nicht benutzerdefinierte ... – qdev

1

Die richtige Syntax des php_flag Befehls ist

php_flag session.cookie_httponly On 

Und darüber im Klaren sein, nur erste Antwort vom Server des Cookie und hier festgelegt (zum Beispiel können Sie sehen die „Httponly“ Richtlinie. So zum Testen Cookies löschen aus dem Browser nach jeder Testanfrage

Verwandte Themen