Установка файлов cookie с использованием флажков HTTPOnly в кодеригнере

Я хотел бы знать, как устанавливать файлы cookie как HTTPOnly в Codeigniter. Я просмотрел документацию и не видел, как установить этот флаг.

Я также хотел установить безопасный флаг для файлов cookie и найти его в файле config.php:

$config['cookie_secure'] = TRUE;

Но в config.php не был параметр HTTPOnly.

Как установить все файлы cookie на HTTPOnly? И если бы это было сделано в рамках, было бы полезно знать, где этот код предназначен для моего собственного обучения (и по умолчанию).

Ответ 1

К счастью, вы можете просмотреть исходный код Session.php в GitHub

В функции _set_cookie вы увидите:

// 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, но вы можете установить его в TRUE через config.php следующим образом:

$config['cookie_httponly'] = TRUE;

Это позволит вашим файлам cookie в рамках структуры быть HTTPOnly.

Ответ 2

Я обнаружил, что они являются drwaback в сеансе mgmt codeigniter, потому что

-

  • Версия 2.1.3 у них нет флага cookie_httponly.
    Решение:
    Шаг 1: вам нужно создать собственную библиотеку My_session.php и расширить системный файл сеанса или изменить Session.php(в файле system- > library- > Session.php)
    Шаг 2: найдите функцию _set_cookie ($ cookie_data = NULL), goto setcookie() и измените как

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

  • Даже если вы добавляете "TRUE" и тестируете с помощью инструмента OWASP ZAP,
    некоторое время он даст вам проблемы CSRF
    ie: HTTPONLY не соответствует действительности,
    Безопасный флаг не включен.

    Причина: С тех пор как sess_destroy устанавливают флажок HTTPONLY и Secure равным none.
    Решение. Обновите функцию sess_destroy в Session.php как

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

Поскольку эти проблемы дали мне бессонные ночи, я надеюсь, что это тоже поможет вам.:)

Ответ 3

2.1.3 не содержит cookie_httponly в foreach, поэтому он не будет устанавливать его.

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