我正在使用Codeigniter框架进行开发,我必须在我的应用程序上应用一些安全性。我希望我的cookie具有httponly属性,可以通过一些配置更改在整个应用程序中应用。我在我的application / config文件中做了以下更改
$config['cookie_secure'] = TRUE;
$config['cookie_httponly'] = TRUE;
我为php.ini文件设置了更改
ini_set( 'session.cookie_httponly', 1 );
在上述更改后,我可以看到我的本地服务器上的cookie属性已更改为httponly,但是当我在实时服务器上部署应用程序时,它无法正常工作。我无法理解我需要应用哪些其他更改。
答案 0 :(得分:3)
启用https的网站(例如https://www.samplewebsite.com)支持httpsonly Cookie,您无需手动设置。只需要求您的服务提供商将“cookie_httponly”值更改为true,或者如果您有服务器访问权限,请自行设置。您还可以将以下代码应用于.htaccess文件。
Header edit Set-Cookie ^(.*)$ $1;Secure;HttpOnly
Header set Set-Cookie "%{http_cookie}e; HTTPOnly" env=http_cookie
答案 1 :(得分:0)
我在这里遇到了类似的问题,答案非常简单。您需要在其中一个CodeIgniter系统库system / libraries / Session.php中修改一个函数,如下所示:
/**
* Write the session cookie
*
* @access public
* @return void
*/
function _set_cookie($cookie_data = NULL)
{
if (is_null($cookie_data))
{
$cookie_data = $this->userdata;
}
// Serialize the userdata for the cookie
$cookie_data = $this->_serialize($cookie_data);
if ($this->sess_encrypt_cookie == TRUE)
{
$cookie_data = $this->CI->encrypt->encode($cookie_data);
}
else
{
// if encryption is not used, we provide an md5 hash to prevent userside tampering
$cookie_data = $cookie_data.md5($cookie_data.$this->encryption_key);
}
$expire = ($this->sess_expire_on_close === TRUE) ? 0 : $this->sess_expiration + time();
// Set the cookie
setcookie(
$this->sess_cookie_name,
$cookie_data,
$expire,
$this->cookie_path,
$this->cookie_domain,
$this->cookie_secure,
true// <-- SYSTEM LIBRARY MODIFICATION TO SET httpOnly to true!!
);
}
上述函数_set_cookie()需要一个额外的参数,它将强制所有cookie都是HTTP Only。 您可以扩展此库并添加该函数的新版本(推荐),但为了简单起见,我在此处对其进行了硬编码。