2012-05-09 24 views
11

Codeigniter'da tanımlama bilgilerini HTTPOnly olarak nasıl ayarlayacağımı öğrenmek istiyorum. Dokümantasyonu inceledim ve bu bayrağı nasıl ayarlayacağımı anlamadım. Codeigniter'da HTTPOnly bayraklarıyla tanımlama bilgileri ayarlama

Ben de çerezleri için güvenli bayrağını ayarlamak isteyen ve config.php de bunu tespit edildi:

$config['cookie_secure'] = TRUE; 

Ama config.php bir HTTPOnly seçenek yoktu.

Tüm tanımlama bilgilerini nasıl HTTPOnly olarak ayarlayabilirim? Ve eğer bu çerçevede yapılırsa, bu kodun kendi öğrenimim için nerede olduğunu (ve varsayılanın ne olduğunu) bilmek faydalı olacaktır.

cevap

23

Neyse ki

fonksiyonu _set_cookie yılında göreceksiniz GitHub'dan

üzerinde Session.php kaynak kodunu görüntüleyebilirsiniz:

// Set the cookie 
setcookie(
    $this->sess_cookie_name, 
    $cookie_data, 
    $expire, 
    $this->cookie_path, 
    $this->cookie_domain, 
    $this->cookie_secure, 
    $this->cookie_httponly 
); 
$this->cookie_httponly değeri __construct atanmış ve varsayılan YANLIŞ ama ayarlayabilirsiniz edilir

config.php aracılığıyla TRUE aşağıdaki gibi:

$config['cookie_httponly'] = TRUE; 

Bu enabl olacak Çerezler çerçevede HTTPOnly olacak.

+0

Bunun için teşekkürler. Kabul edildi ve reddedildi. İyi bir şey sordum. – chowwy

+2

Artık bu sürüm 2.1'de çalışmıyor.Aşağıdaki yorumda belirtildiği gibi 3. – ethicalhack3r

3

2.1.3 foreach öğesinde cookie_httponly içermiyor, bu nedenle ayarlanmayacaktır. Ayrıca burada ayarlanan gelmez

foreach (array('sess_encrypt_cookie', 'sess_use_database', 'sess_table_name', 'sess_expiration', 'sess_expire_on_close', 'sess_match_ip', 'sess_match_useragent', 'sess_cookie_name', 'cookie_path', 'cookie_domain', 'cookie_secure', 'sess_time_to_update', 'time_reference', 'cookie_prefix', 'encryption_key') as $key) 

...

setcookie(
       $this->sess_cookie_name, 
       $cookie_data, 
       $expire, 
       $this->cookie_path, 
       $this->cookie_domain, 
       $this->cookie_secure 
      ); 
+0

Bunu testlerimde onaylayabilirim, nasıl ayarlanabileceğini biliyor musunuz? – ethicalhack3r

+0

Peki şimdi nasıl yapılabilir? –

8

Ben CodeIgniter'da oturumu Website bir drwaback onların ettiğini tespit ettiği

-

  1. 2,1 .3 sürümünde cookie_httponly bayrağı yok.
    Çözüm:
    1. Adım: Session.php kütüphanesinde kendi My_session.php oluşturmak ve sistem oturumu dosyayı genişletmek veya değiştirmek gerekir (içinde sistematik> kütüphane> Session.php dosyası)
    Adım 2: bulmak _set_cookie ($ cookie_data = NULL) işlevi, git setcookie() ve modifiye olarak

    setcookie( $this->sess_cookie_name, $cookie_data, $expire,
    $this->cookie_path, $this->cookie_domain, $this->cookie_secure, TRUE ); // add True flag.

  2. Hatta "DOĞRU" ekliyoruz ve OWASP ZAP aracıyla test,
    bazı sefer vereceğim eğer sorunları csrf eğer olsa
    Yani: HTTPONLY doğru değil,
    Güvenli bayrak etkin değil.

    Sebep: Oturduğundan beri oturum_destroy, HTTPONLY ve Güvenli bayrağı yok olarak ayarlıyorlar.
    Çözüm:

    // Kill the cookie 
    `setcookie(
          $this->sess_cookie_name, 
         addslashes(serialize(array())), 
         ($this->now - 31500000), 
         $this->cookie_path, 
         $this->cookie_domain, 
         TRUE, 
         TRUE 
        );` 
    

olarak Session.php Güncelleme sess_destroy fonksiyonu bu konular beni uykusuz geceler verdi beri bu yüzden bu da size yardımcı olacağını umuyoruz. :)

İlgili konular