2012-05-09 2 views
11

쿠키를 Codeigniter에서 HTTPOnly로 설정하는 방법을 알고 싶습니다. 설명서를 검토했지만이 플래그를 설정하는 방법을 보지 못했습니다. codeigniter에서 HTTPOnly 플래그로 쿠키 설정

는 또한 쿠키 보안 플래그를 설정하고자하고 config.php 파일에서 발견되었다 :

$config['cookie_secure'] = TRUE; 

을하지만 config.php에있는 Http 만 옵션이 아니었다.

어떻게 모든 쿠키를 HTTPOnly로 설정합니까? 그리고 그것이 프레임 워크에서 끝나면, 그 코드가 내 자신의 학습을위한 곳 (그리고 기본값이 무엇인지)을 아는 것이 도움이 될 것입니다.

답변

23

는 다행히 당신은

기능 _set_cookie 당신이 볼 수 GitHub의

Session.php의 소스 코드를 볼 수 있습니다

// 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의 값은 __construct에 할당 된 기본값은 FALSE입니다하지만 당신은 설정할 수있다

config.php 통해 TRUE로는 다음과 같이

$config['cookie_httponly'] = TRUE; 

이 ENABL합니다 HTTPOnly이되도록 프레임 워크 내에서 쿠키를 만듭니다.

+0

감사합니다. 받아 들여지고 upvoted. 내가 물었던 좋은 물건. – chowwy

+2

버전 2.1에서는 더 이상 작동하지 않습니다.3 아래의 설명에서 언급 한대로. – ethicalhack3r

3

2.1.3 foreach에는 cookie_httponly가 포함되어 있지 않으므로 설정하지 않습니다. 또한 여기에서 설정하지 않는

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

테스트에서이 사실을 확인할 수 있으며 설정 방법을 알고 있습니까? – ethicalhack3r

+0

이제 어떻게 할 수 있습니까? –

8

나는 CodeIgniter의의 세션 MGMT의 drwaback 자신의 것으로 나타났습니다 때문에

-

  1. 2.1 .3 버전에는 cookie_httponly 플래그가 없습니다.
    솔루션 :
    1 단계 : 당신은 Session.php을 도서관에서 자신의 My_session.php 생성하고 시스템 세션 파일을 확장하거나 수정해야 (에서 시스템 -> 도서관 -> Session.php 파일)
    2 단계 : 찾을 _set_cookie ($ cookie_data = NULL) 함수, 고토의 setcookie() 및 수정 등의

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

  2. 비록 당신이 "TRUE"를 추가하고 OWASP ZAP 도구를 테스트,
    약간의 시간이 줄 것이다 경우 문제를 CSRF 경우 비록
    예 : HTTPONLY가 참이 아님,
    보안 플래그가 활성화되어 있지 않습니다.

    이유 : sess_destroy가 HTTPONLY 및 Secure 플래그를 none으로 설정하기 때문에.
    솔루션 :

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

로 Session.php에서 업데이트 sess_destroy 기능이 문제가 나에게 잠못드는 밤을 준 때문에 그래서이뿐만 아니라 당신에게 도움이되기를 바랍니다. :)