如何在PHP中设置使用HttpOnly cookie
时间:2020-03-05 18:45:40 来源:igfitidea点击:
如何在我的PHP应用程序中将cookie设置为HttpOnly cookies?
解决方案
回答
来自Ilia的解释...仅5.2
PHP 5.2中的httpOnly cookie标志支持
如该文章所述,我们可以在以前的PHP版本中自行设置标头
header("Set-Cookie: hidden=value; httpOnly");
回答
<?php //None HttpOnly cookie: setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE); //HttpOnly cookie: setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE); ?>
来源
回答
我们可以在set cookie函数中指定它,请参见php手册
setcookie('Foo','Bar',0,'/', 'www.sample.com' , FALSE, TRUE);
回答
- 对于Cookie,请参见此答案。
- 对于PHP自己的会话cookie(默认情况下为PHPSESSID),请参见@richie的答案
setcookie()和setrawcookie()函数在PHP 5.2.0的黑暗年代引入了httponly
参数,使它变得简单易用。根据语法,只需将第7个参数设置为true
简化功能语法
setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly ) setrawcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
输入" NULL"作为我们希望保留为默认值的参数。
我们可能还需要考虑是否应该设置"安全"参数。
也可以使用较旧的较低级别的header()
函数:
header( "Set-Cookie: name=value; httpOnly" );
回答
请注意,HttpOnly不会停止跨站点脚本;它会阻止跨站点脚本。相反,它抵消了一种可能的攻击,目前仅在IE上进行(FireFox在XmlHttpRequest中公开HttpOnly cookie,而Safari根本不接受)。一定要打开HttpOnly,但是在进行交易时,甚至不要花费一个小时的输出过滤和模糊测试。
回答
请注意,默认情况下,PHP会话cookie不使用httponly
。
要做到这一点:
$sess_name = session_name(); if (session_start()) { setcookie($sess_name, session_id(), null, '/', null, null, true); }
这里有几个注意事项:
- 我们必须在session_start()之前调用session_name()。
- 这还将默认路径设置为'/',这对于Opera来说是必需的,但是默认情况下也不使用PHP会话cookie。