我想知道如何在 Codeigniter 中将 cookie 设置为 HTTPOnly。我查看了文档,但没有看到如何设置此标志。
我还想为 cookie 设置安全标志,并在 config.php 文件中找到它:
$config['cookie_secure'] = TRUE;
但是 config.php 中没有 HTTPOnly 选项。
如何将所有 cookie 设置为 HTTPOnly?如果它是在框架中完成的,那么知道该代码在哪里供我自己学习(以及默认值是什么)会很有帮助。
我想知道如何在 Codeigniter 中将 cookie 设置为 HTTPOnly。我查看了文档,但没有看到如何设置此标志。
我还想为 cookie 设置安全标志,并在 config.php 文件中找到它:
$config['cookie_secure'] = TRUE;
但是 config.php 中没有 HTTPOnly 选项。
如何将所有 cookie 设置为 HTTPOnly?如果它是在框架中完成的,那么知道该代码在哪里供我自己学习(以及默认值是什么)会很有帮助。
幸运的是,您可以在 GitHub 上查看Session.php的源代码
在函数_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,但您可以通过config.php
以下方式将其设置为 TRUE:
$config['cookie_httponly'] = TRUE;
这将使框架内的 cookie 成为 HTTPOnly。
我发现他们是 codeigniter 会话管理中的一个 drwaback,因为
-
2.1.3 版本他们没有 cookie_httponly 标志。
解决方法:
第一步:需要在库中创建自己的 My_session.php 并扩展系统会话文件或修改 Session.php(在 system->library->Session.php 文件中)
第二步:找到 _set_cookie($cookie_data = NULL) 函数, 转到 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 问题
,即:HTTPONLY 不正确,
安全标志未启用。
原因:因为在 sess_destroy 时,他们将 HTTPONLY 和 Secure 标志设置为 none。
解决方案:将 Session.php 中的 sess_destroy 函数更新为
// 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 的 foreach 中不包含 cookie_httponly,所以不会设置它。
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 中确实存在,请参阅此 config.php:
| 'cookie_httponly' = Cookie 只能通过 HTTP(S) 访问(无 javascript)
$config['cookie_httponly'] = 真;