установка файлов 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, потому что
-
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.-
даже если вы добавляете "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;