Wie kann ich die Cookies in meinem PHP apps
as setzen HttpOnly cookies
?
$cookie->setHttpOnly(true);
mit github.com/delight-im/PHP-Cookie
Wie kann ich die Cookies in meinem PHP apps
as setzen HttpOnly cookies
?
$cookie->setHttpOnly(true);
mit github.com/delight-im/PHP-Cookie
Antworten:
PHPSESSID
standardmäßig) finden Sie in der Antwort von @ richieDie setcookie()
und setrawcookie()
-Funktionen führten den httponly
Parameter 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 NULL
Sie die Parameter ein, die Sie als Standard beibehalten möchten. Möglicherweise möchten Sie auch überlegen, ob Sie den secure
Parameter einstellen sollten .
Es ist auch möglich, die ältere header()
Funktion auf niedrigerer Ebene zu verwenden:
header( "Set-Cookie: name=value; httpOnly" );
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 );
php.ini
.
php_value
zu php_flag
funktioniert funktioniert nicht. Ich habe es gerade auf meinem Server versucht ..
php_flag
, müssen Sie auch den Wert ändern - entweder on
oder off
- siehe Handbuch.
Beachten Sie, dass PHP-Sitzungscookies httponly
standardmäß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:
session_name()
vorher anrufensession_start()
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.
Erklärung hier von Ilia ... nur 5.2
Unterstützung nur für Cookie-Flags in PHP 5.2
Wie in diesem Artikel angegeben, können Sie den Header in früheren Versionen von PHP selbst festlegen
header("Set-Cookie: hidden=value; httpOnly");
Sie können es in der eingestellten Cookie-Funktion 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.
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.
Eine elegantere Lösung seit PHP> = 7.0
session_start(['cookie_lifetime' => 43200,'cookie_secure' => true,'cookie_httponly' => true]);