如何将PHP apps
中的Cookie设置为HttpOnly cookies
?
答案 0 :(得分:106)
对于Apache自己的会话cookie:
将此添加到您的Apache配置或.htaccess
<IfModule php5_module>
php_flag session.cookie_httponly on
</IfModule>
这也可以在脚本中设置,只要在session_start()
之前调用它。
ini_set( 'session.cookie_httponly', 1 );
答案 1 :(得分:83)
PHPSESSID
),请参阅@richie's answer setcookie()
和setrawcookie()
函数引入了httponly
参数,回到了PHP 5.2.0的黑暗时代,这使得这很简单。根据语法
简化了函数语法
setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
setrawcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
输入NULL
表示您希望保留为默认值的参数。
您可能还想考虑是否应该设置secure
参数。
也可以使用较旧的较低级header()
函数:
header( "Set-Cookie: name=value; httpOnly" );
答案 2 :(得分:13)
请注意,HttpOnly不会停止跨站点脚本;相反,它中和了一种可能的攻击,目前仅在IE上执行此操作(FireFox在XmlHttpRequest中暴露HttpOnly cookie,而Safari根本不尊重它)。无论如何,打开HttpOnly,但不要在交易中丢弃一小时的输出过滤和模糊测试。
答案 3 :(得分:12)
请注意,PHP会话cookie默认情况下不使用httponly
。
要做到这一点:
$sess_name = session_name();
if (session_start()) {
setcookie($sess_name, session_id(), null, '/', null, null, true);
}
这里有几点需要注意:
session_name()
在session_start()
答案 4 :(得分:5)
此处来自Ilia的解释...... 5.2仅限
httpOnly cookie flag support in PHP 5.2
如该文章所述,您可以在以前的PHP版本中自行设置标题
header("Set-Cookie: hidden=value; httpOnly");
答案 5 :(得分:5)
<?php
//None HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE);
//HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
?>
答案 6 :(得分:5)
您可以在设置Cookie函数see the php manual
中指定它setcookie('Foo','Bar',0,'/', 'www.sample.com' , FALSE, TRUE);
答案 7 :(得分:3)
您可以在头文件中使用它。
// setup session enviroment
ini_set('session.cookie_httponly',1);
ini_set('session.use_only_cookies',1);
这样所有未来的会话cookie都将使用httponly。
答案 8 :(得分:1)
php_flag命令的正确语法是
php_flag session.cookie_httponly On
请注意,只需从服务器首先回答设置cookie和此处(例如,您可以看到“HttpOnly”指令。因此,在每次测试请求后测试从浏览器删除cookie。
答案 9 :(得分:0)
自 PHP> = 7.0
以来的更优雅的解决方案session_start(['cookie_lifetime' => 43200,'cookie_secure' => true,'cookie_httponly' => true]);