Frage

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

War es hilfreich?

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()Vor session_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); 

?>

Quelle

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top