2012-05-09 33 views
11

Tôi muốn biết cách đặt cookie là HTTPOnly trong Codeigniter. Tôi đã xem lại tài liệu và không thấy cách đặt cờ này.đặt cookie với các cờ HTTPOnly trong mã vạch

Tôi cũng đã tìm cách để thiết lập các cờ bảo mật cho các tập tin cookie và tìm thấy nó trong file config.php:

$config['cookie_secure'] = TRUE; 

Nhưng không có một tùy chọn HttpOnly trong config.php.

Làm cách nào để đặt tất cả cookie thành HTTPOnly? Và nếu nó được thực hiện trong khuôn khổ, nó sẽ rất hữu ích để biết mã đó là để học tập của riêng tôi (và những gì mặc định là).

Trả lời

23

May mắn là bạn có thể xem mã nguồn cho Session.php trên GitHub

Trong chức năng _set_cookie bạn sẽ thấy:

// Set the cookie 
setcookie(
    $this->sess_cookie_name, 
    $cookie_data, 
    $expire, 
    $this->cookie_path, 
    $this->cookie_domain, 
    $this->cookie_secure, 
    $this->cookie_httponly 
); 

Giá trị cho $this->cookie_httponly được gán trong __construct và mặc định là FALSE nhưng bạn có thể thiết lập nó đến TRUE thông qua config.php như sau:

$config['cookie_httponly'] = TRUE; 

Điều này sẽ enabl e cookie của bạn trong khuôn khổ để được HTTPOnly.

+0

Cảm ơn vì điều này. Được chấp nhận và upvoted. Điều tốt tôi đã hỏi. – chowwy

+2

Điều này không còn hoạt động trong phiên bản 2.1.3 như đã đề cập trong phần bình luận dưới đây. – ethicalhack3r

3

2.1.3 không chứa cookie_httponly trong foreach để nó không được đặt.

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) 

cũng không đặt ở đây ...

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

Tôi có thể xác nhận điều này trong các bài kiểm tra của tôi, bạn có biết làm thế nào nó có thể được thiết lập? – ethicalhack3r

+0

Vậy làm thế nào nó có thể được thực hiện ngay bây giờ? –

8

tôi thấy rằng họ là một drwaback trong phiên Quản lý đ.thoại của CodeIgniter vì

-

  1. 2,1 .3 Phiên bản của họ không có cờ cookie_httponly.
    Giải pháp:
    Bước 1: Bạn cần tạo My_session.php riêng trong thư viện và mở rộng tệp phiên hệ thống hoặc sửa đổi Session.php (trong hệ thống-> thư viện-> tệp Session.php)
    Bước 2: tìm _set_cookie ($ cookie_data = NULL) chức năng, goto setcookie() và sửa đổi như

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

  2. Mặc dù nếu bạn đang thêm "TRUE" và nếu thử nghiệm với công cụ OWASP ZAP,
    một thời gian nó sẽ cung cấp cho bạn CSRF vấn đề
    tức là: HTTPONLY không đúng,
    Cờ an toàn không được bật.

    Lý do: Vì trong khi sess_destroy họ đang đặt cờ HTTPONLY và Bảo mật thành không.
    Giải pháp: Cập nhật chức năng sess_destroy trong Session.php như

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

Kể từ khi những vấn đề này đã cho tôi đêm không ngủ vì vậy tôi hy vọng điều này sẽ giúp bạn là tốt. :)

Các vấn đề liên quan