PHP'de HttpOnly tanımlama bilgilerini nasıl kurarsınız?


93

Nasıl benim çerezleri ayarlayabilirsiniz PHP appsolarak HttpOnly cookies?


stackoverflow.com/questions/528405/… Tarayıcı destek bilgisine sahiptir.
Kzqai

2
@Tchalvak Hayır, mevcut cevaplar hala geçerli. PHP'deki salt HTTP tanımlama bilgisi ayarıyla ilgili 2008'den beri hiçbir şey değişmedi. Hangi tarayıcıların yalnızca HTTP çerezlerini desteklemesi farklı bir sorudur ve yanıtı farklıdır.
lanzz

Sen kullanabilirsiniz $cookie->setHttpOnly(true);ile github.com/delight-im/PHP-Cookie
caw

Yanıtlar:


94
  • İçin çerezlerinizle , bu cevaba bakınız.
  • İçin PHP'nin kendi oturum tanımlama ( PHPSESSIDvarsayılan olarak,), bkz richie'in cevabı @

setcookie()Ve setrawcookie()fonksiyonlar, tanıtılan httponlykolay 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 )

NULLVarsayılan olarak kalmasını istediğiniz parametreleri girin . secureParametreyi 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" );

1
PHP 8'in adlandırılmış parametreleriyle, set_cookiediğ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).
Sygmoral

122

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

9
+1, çünkü bu, sunucunuzun tamamında yer alması (güvenlik için), bunun yerine php.ini.
Anthony Hatzopoulos

10
Lütfen bunun yerine php_flag'ın kullanılması gerektiğini unutmayın: "Boole değerlerini ayarlamak için php_value kullanmayın. Onun yerine php_flag kullanılmalıdır." php.net/manual/en/configuration.changes.php
Ondrej Machulda

@OndrejMachulda Değişen php_valueiçin php_flagçalışmalarını yapmaz. Sunucumda denedim ..
Nate

6
@Nate: olarak php_flagdeğiştirirken, değeri de değiştirmelisiniz - onveya olarak off- kılavuza bakın.
Ondrej Machulda

14

PHP oturum tanımlama bilgilerinin httponlyvarsayı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:

  • Daha session_name() önce araman gereksession_start()
  • Bu aynı zamanda Opera için gerekli olan, ancak PHP oturum tanımlama bilgilerinin de varsayılan olarak yapmadığı varsayılan yolu '/' olarak ayarlar.

12
php.net/manual/en/function.session-set-cookie-params.php Özel kodlama yerine yukarıdaki PHP işlevi aracılığıyla otomatik olarak yapılabilir.
Ryaner

13

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.


13
Bu durum şimdi 2008'den beri değişmiş olabilir. İşte daha güncel / güncellenmiş bir liste: stackoverflow.com/questions/528405/…
Kzqai

7
<?php
//None HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE); 

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

?>

Kaynak




4

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.

  • Güncellenmiş.

2
Sadece FYI session.use_only_cookies, PHP> 5.3'te varsayılan olarak açıktır
Nic Cottrell

1
ve doğru olan, "gelecekteki tüm oturum çerezleri" özel olanları değil, https kullanacak ...
qdev

2

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.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.