Nasıl benim çerezleri ayarlayabilirsiniz PHP apps
olarak HttpOnly cookies
?
$cookie->setHttpOnly(true);
ile github.com/delight-im/PHP-Cookie
Nasıl benim çerezleri ayarlayabilirsiniz PHP apps
olarak HttpOnly cookies
?
$cookie->setHttpOnly(true);
ile github.com/delight-im/PHP-Cookie
Yanıtlar:
PHPSESSID
varsayılan olarak,), bkz richie'in cevabı @setcookie()
Ve setrawcookie()
fonksiyonlar, tanıtılan httponly
kolay bu güzel ve yapım sırt PHP 5.2.0 karanlık çağlarda, parametre. Sözdizimine göre 7. parametreyi true olarak ayarlamanız yeterlidir
Kısalık için basitleştirilmiş işlev sözdizimi
setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
setrawcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
NULL
Varsayılan olarak kalmasını istediğiniz parametreleri girin . secure
Parametreyi ayarlamanız gerekip gerekmediğini de düşünebilirsiniz .
Daha eski, daha düşük seviyeli header()
işlevi kullanmak da mümkündür :
header( "Set-Cookie: name=value; httpOnly" );
set_cookie
diğer parametreleri ayarlamamız gerekmiyorsa, nihayet çağrıyı daha az ayrıntılı hale getirebileceğiz . Örneğin set_cookie($name, $value, httponly: true)
.
PHP'nin Apache üzerindeki kendi oturum tanımlama bilgileri için:
bunu Apache yapılandırmanıza ekleyin veya.htaccess
<IfModule php5_module>
php_flag session.cookie_httponly on
</IfModule>
Bu, daha önce çağrıldığı sürece bir komut dosyası içinde de ayarlanabilir session_start()
.
ini_set( 'session.cookie_httponly', 1 );
php.ini
.
php_value
için php_flag
çalışmalarını yapmaz. Sunucumda denedim ..
php_flag
değiştirirken, değeri de değiştirmelisiniz - on
veya olarak off
- kılavuza bakın.
PHP oturum tanımlama bilgilerinin httponly
varsayılan olarak kullanmadığını unutmayın.
Bunu yapmak için:
$sess_name = session_name();
if (session_start()) {
setcookie($sess_name, session_id(), null, '/', null, null, true);
}
Burada birkaç not:
session_name()
önce araman gereksession_start()
HttpOnly'nin siteler arası komut dosyası oluşturmayı durdurmadığını unutmayın; bunun yerine, olası bir saldırıyı etkisiz hale getirir ve şu anda bunu yalnızca IE'de yapar (FireFox, XmlHttpRequest'te HttpOnly tanımlama bilgilerini açığa çıkarır ve Safari bunu hiç kabul etmez). Elbette, HttpOnly'yi açın, ancak bunun için ticarette bir saatlik çıktı filtrelemeyi ve fuzz testini bile düşürmeyin.
Burada Ilia'dan açıklama ... 5.2 ancak
http: PHP 5.2'de yalnızca tanımlama bilgisi bayrağı desteği
Bu makalede belirtildiği gibi, üstbilgiyi önceki PHP sürümlerinde kendiniz ayarlayabilirsiniz.
header("Set-Cookie: hidden=value; httpOnly");
Bunu set çerez fonksiyonunda belirtebilirsiniz , php kılavuzuna bakın
setcookie('Foo','Bar',0,'/', 'www.sample.com' , FALSE, TRUE);
Bunu bir başlık dosyasında kullanabilirsiniz.
// setup session enviroment
ini_set('session.cookie_httponly',1);
ini_set('session.use_only_cookies',1);
Bu şekilde gelecekteki tüm oturum tanımlama bilgileri ,htponly'yi kullanacaktır.
Php_flag komutunun doğru sözdizimi şöyledir:
php_flag session.cookie_httponly On
Ve unutmayın, sunucudan gelen ilk yanıt tanımlama bilgisini ayarlayın ve burada (örneğin "HttpOnly" direktifini görebilirsiniz. Yani test etmek için her test isteğinden sonra tarayıcıdan tanımlama bilgilerini silin.
PHP> = 7.0'dan beri daha zarif bir çözüm
session_start(['cookie_lifetime' => 43200,'cookie_secure' => true,'cookie_httponly' => true]);