在codeigniter中使用HTTPOnly标志设置cookie

cho*_*wwy 14 cookies xss codeigniter codeigniter-2

我想知道如何在Codeigniter中将cookie设置为HTTPOnly.我查看了文档,但没有看到如何设置此标志.

我还想设置cookie的安全标志,并在config.php文件中找到它:

$config['cookie_secure'] = TRUE;
Run Code Online (Sandbox Code Playgroud)

但是config.php中没有HTTPOnly选项.

如何将所有cookie设置为HTTPOnly?如果它是在框架中完成的,那么知道该代码在我自己的学习中的位置(以及默认值是什么)会很有帮助.

sik*_*der 29

幸运的是,您可以在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
);
Run Code Online (Sandbox Code Playgroud)

$this->cookie_httponly已分配值,__construct默认值为FALSE,但您可以通过config.php以下方式将其设置为TRUE :

$config['cookie_httponly'] = TRUE;
Run Code Online (Sandbox Code Playgroud)

这将使您的框架内的cookie成为HTTPOnly.

  • 这不再适用于下面的评论中提到的2.1.3版本. (2认同)

小智 10

我发现他们是一个drwaback会话mgmt的codeigniter因为

-

  1. 2.1.3版本他们没有cookie_httponly标志.
    解决方案:
    步骤1:您需要在库中创建自己的My_session.php并扩展系统会话文件或修改Session.php(在system-> library-> Session.php文件中)
    第2步:find _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.

  2. 即使你正在添加"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 
         );`
    
    Run Code Online (Sandbox Code Playgroud)

由于这些问题给了我不眠之夜,所以我希望这对你也有帮助.:)