Установка файлов 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
);