我想知道如何在Codeigniter中将cookie设置为HTTPOnly。我查看了文档,但没有看到如何设置此标志。
我还想设置cookie的安全标志,并在config.php文件中找到它:
$config['cookie_secure'] = TRUE;
但是config.php中没有HTTPOnly选项。
如何将所有Cookie设置为HTTPOnly?如果它在框架中完成,那么知道该代码在我自己的学习中的位置(以及默认值是什么)会很有帮助。
答案 0 :(得分:27)
幸运的是,您可以在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。
答案 1 :(得分:9)
我发现他们是一个drwaback会话mgmt的codeigniter,因为
-
2.1.3版本他们没有cookie_httponly标志。
解决方案:
步骤1:您需要在库中创建自己的My_session.php并扩展系统会话文件或修改Session.php(在system-> library-> Session.php文件中)
第2步:找到_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 :(得分:3)
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
);
答案 3 :(得分:0)
该功能现在在v2中确实存在,请参见以下config.php:
| 'cookie_httponly'= Cookie仅可通过HTTP(S)访问(无javascript)
$ config ['cookie_httponly'] = TRUE;