Jak mogę ustawić pliki cookie w moim PHP apps
as HttpOnly cookies
?
$cookie->setHttpOnly(true);
z github.com/delight-im/PHP-Cookie
Jak mogę ustawić pliki cookie w moim PHP apps
as HttpOnly cookies
?
$cookie->setHttpOnly(true);
z github.com/delight-im/PHP-Cookie
Odpowiedzi:
PHPSESSID
domyślnie) zobacz odpowiedź @ richieFunkcje setcookie()
i setrawcookie()
wprowadziły httponly
parametr już w ciemnych czasach PHP 5.2.0, dzięki czemu jest to przyjemne i łatwe. Po prostu ustaw siódmy parametr na true, zgodnie ze składnią
Uproszczona składnia funkcji dla zwięzłości
setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
setrawcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
Wprowadź NULL
parametry, które chcesz zachować jako domyślne. Możesz również rozważyć, czy powinieneś ustawiać secure
parametr.
Jest to również możliwe przy użyciu starszej header()
funkcji niższego poziomu :
header( "Set-Cookie: name=value; httpOnly" );
set_cookie
wywołanie będzie mniej szczegółowe, jeśli nie będziemy musieli ustawiać innych parametrów. Na przykład set_cookie($name, $value, httponly: true)
.
W przypadku własnych plików cookie sesji PHP na serwerze Apache:
dodaj to do konfiguracji serwera Apache lub.htaccess
<IfModule php5_module>
php_flag session.cookie_httponly on
</IfModule>
Można to również ustawić w skrypcie, o ile zostało wywołane wcześniej session_start()
.
ini_set( 'session.cookie_httponly', 1 );
php.ini
.
php_value
na php_flag
nie działa. Właśnie wypróbowałem to na moim serwerze ...
php_flag
, należy również zmienić wartość - na albo on
lub off
- patrz instrukcja.
Zauważ, że sesyjne pliki cookie PHP nie używają httponly
domyślnie.
Aby to zrobić:
$sess_name = session_name();
if (session_start()) {
setcookie($sess_name, session_id(), null, '/', null, null, true);
}
Kilka rzeczy wartych uwagi:
session_name()
wcześniejsession_start()
Należy pamiętać, że HttpOnly nie zatrzymuje skryptów między witrynami; zamiast tego neutralizuje jeden możliwy atak i obecnie robi to tylko na IE (FireFox ujawnia pliki cookie HttpOnly w XmlHttpRequest, a Safari w ogóle go nie honoruje). Jak najbardziej, włącz HttpOnly, ale nie rezygnuj nawet z godziny filtrowania wyjścia i testowania fuzz w zamian za to.
Wyjaśnienie tutaj z Ilii ... tylko 5.2
Obsługa flag plików cookie httpOnly w PHP 5.2
Jak wspomniano w tym artykule, możesz samodzielnie ustawić nagłówek w poprzednich wersjach PHP
header("Set-Cookie: hidden=value; httpOnly");
Możesz to określić w funkcji ustawiania plików cookie, patrz podręcznik PHP
setcookie('Foo','Bar',0,'/', 'www.sample.com' , FALSE, TRUE);
Możesz użyć tego w pliku nagłówkowym.
// setup session enviroment
ini_set('session.cookie_httponly',1);
ini_set('session.use_only_cookies',1);
W ten sposób wszystkie przyszłe sesyjne pliki cookie będą używać tylko protokołu http.
Prawidłowa składnia polecenia php_flag to
php_flag session.cookie_httponly On
I pamiętaj, po prostu pierwsza odpowiedź z serwera ustaw plik cookie i tutaj (na przykład możesz zobaczyć dyrektywę "HttpOnly". Więc do testowania usuń pliki cookie z przeglądarki po każdym żądaniu testowym.
Bardziej eleganckie rozwiązanie od PHP> = 7.0
session_start(['cookie_lifetime' => 43200,'cookie_secure' => true,'cookie_httponly' => true]);