2008-08-31 22 views
78

PHP apps adresimdeki çerezleri HttpOnly cookies olarak nasıl ayarlayabilirim? Burada IliaHttpOnly çerezlerini PHP'de nasıl kurarsınız

+0

http://stackoverflow.com/questions/528405/which-browsers-do-support-httponly-cookies Tarayıcı destek bilgisi var – Kzqai

+2

@Tchalvak Hayır, mevcut cevaplar hala yetkili PHP'den HTTP-only cookie ayarı ile ilgili olarak 2008'den beri hiçbir şey değişmedi. _Which tarayıcıları sadece HTTP için çerezleri destekliyor. Soru, farklı bir cevapla. – lanzz

+0

https://github.com/delight-im/PHP-Cookie – caw

cevap

75
  • yılında, bu cevaba bakınız.
  • (varsayılan olarak PHPSESSID,) PHP'nin kendi oturum tanımlama için @richie's answer

setcookie() ve setrawcookie() fonksiyonları, bu güzel hale geri PHP 5.2.0 karanlık çağlarda, httponly parametreyi tanıtıldı Ve kolay. Basitçe varsayılan olarak kalmasını isteyen parametreler için NULL girin kısalık

setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly) 
setrawcookie($name, $value, $expire, $path, $domain, $secure, $httponly) 

için basitleştirilmiş Fonksiyon sözdizimi

sözdizimi gereği, true 7 parametresini ayarlayın. secure parametresini ayarlamanız gerekip gerekmediğini de göz önünde bulundurmak isteyebilirsiniz.

O yaşlı, alt düzey header() işlevini kullanarak da mümkündür:

header("Set-Cookie: name=value; httpOnly"); 
4
<?php 
//None HttpOnly cookie: 
setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE); 

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

?> 

PHP önceki sürümlerinde başlığını kendiniz ayarlayabilirsiniz Source

5

Belirtebilirsiniz o set çerez fonksiyonu çerezlerinizle için see the php manual

setcookie('Foo','Bar',0,'/', 'www.sample.com' , FALSE, TRUE); 
13

HttpOnly siteler arası komut dosyası durmaz 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 çerezlerini açığa çıkarır ve Safari bunu onurlandırmaz). Her halükarda, HttpOnly'yi açın, ancak bunun için bir saatlik çıkış filtreleme ve fuzz testini bile düşürmeyin.

+12

ile '$ cookie-> setHttpOnly (true);' Bu durumu şu anda '08'den beri değişmiş olabilir. Burada daha güncel/güncel bir liste var: http://stackoverflow.com/questions/528405/which-browsers-do-support-httponly-cookies – Kzqai

+0

Gerçekten de düşürümümü kaldırmak istiyorum. –

9

PHP oturum çerezlerinin varsayılan olarak httponly kullanmayın.

Bunu yapmak için:

$sess_name = session_name(); 
if (session_start()) { 
    setcookie($sess_name, session_id(), null, '/', null, null, true); 
} 

burada notun öğelerin bir çift: Sen session_start()

  • önce session_name() aramak zorunda

    • Bu aynı zamanda varsayılan yolunu ayarlar '/ ' ' un Opera için gerekli olduğu, ancak PHP oturum çerezlerinin varsayılan olarak da.
  • +11

    http://php.net/manual/en/function.session-set-cookie-params.php Özel kodlama yerine yukarıdaki PHP işleviyle otomatik olarak yapılabilir. – Ryaner

    87
    Apache üzerinde PHP'nin kendi oturum çerezleri için

    :
    Apache yapılandırmanıza bu ekleyebilir veya

    <IfModule php5_module> 
        php_flag session.cookie_httponly on 
    </IfModule> 
    

    Bu .htaccess da sürece session_start() önce denir, bir komut dosyası içinde ayarlanabilir.

    ini_set('session.cookie_httponly', 1); 
    
    +9

    +1 bu, sunucunuzun tamamında yer almak için iyi bir şeydir (güvenlik için) ancak bunun yerine php.ini'ye eklenmiştir. –

    +8

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

    +0

    @OndrejMachulda "php_value" ifadesinin php_flag işlevinin değiştirilmesi işe yaramıyor. Sadece sunucumda denedim .. – Nate

    3

    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 tanımlama bilgileri httponly'yi kullanır.

    +0

    Sadece FYI session.use_only_cookies varsayılan olarak PHP> 5.3 –

    +0

    'da açık ve "tüm gelecekteki ** oturumları ** çerezleri" http: – qdev

    1

    php_flag komutunun doğru sözdizimi burada

    php_flag session.cookie_httponly On 
    

    Ve olmak farkında, sadece ilk cevap sunucusundan ayarlanmış çerez gelen ve bir (Sen "HttpOnly" yönergesini görebilirsiniz örneğin. Test çerezleri silmek için Yani Her test isteğinden sonra tarayıcıdan