установка файлов cookie с флагами HTTPOnly в codeigniter

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

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

$config['cookie_secure'] = TRUE;

но в config не было опции HTTPOnly.РНР.

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

4 ответов


к счастью, вы можете просмотреть исходный код сессии.в 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;

это позволит вашим cookies в рамках быть HTTPOnly.


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

-

  1. 2.1.3 версия их не является флагом cookie_httponly.
    Решение:
    Шаг 1: вам нужно создать собственный My_session.php в библиотеке и расширить файл системного сеанса или изменить сеанс.php (в системе- > библиотека - >сеанс.файл 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.

  2. даже если вы добавляете "TRUE" и если тест с помощью OWASP ZAP tool,
    некоторое время это даст вам проблемы CSRF
    ie: HTTPONLY не верно,
    флаг Secure не позволят.

    Причина: поскольку во время sess_destroy они устанавливают флаг HTTPONLY и Secure в none.
    Решение: обновите функцию sess_destroy в сеансе.php как

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

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


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

эта функция существует сейчас в v2, см. эту конфигурацию.на PHP:

/ 'cookie_httponly' = Cookie будет доступен только через HTTP (S) (без javascript)

$config ['cookie_httponly'] = TRUE;