How do you set up use HttpOnly cookies in PHP
如何将PHP apps中的cookie设置为HttpOnly cookies?
对于Apache上PHP自己的会话cookie:
将此添加到您的Apache配置或.htaccess
1 2 3
| <IfModule php5_module>
php_flag session.cookie_httponly on
</IfModule> |
只要在session_start()之前调用它,也可以在脚本中设置它。
1
| ini_set( 'session.cookie_httponly', 1 ); |
-
对于您的Cookie,请参见此答案。
-
有关PHP自己的会话cookie(默认为PHPSESSID),请参见@richie的答案
在PHP 5.2.0的黑暗年代,setcookie()和setrawcookie()函数引入了httponly参数,使此操作变得轻松愉快。根据语法,只需将第7个参数设置为true
简化功能语法
1 2
| setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
setrawcookie( $name, $value, $expire, $path, $domain, $secure, $httponly ) |
输入NULL作为您希望保留为默认值的参数。
您可能还需要考虑是否应该设置secure参数。
也可以使用较低的较低级别的header()函数:
1
| header("Set-Cookie: name=value; httpOnly" ); |
请注意,默认情况下,PHP会话cookie不使用httponly。
要做到这一点:
1 2 3 4
| $sess_name = session_name();
if (session_start()) {
setcookie($sess_name, session_id(), null, '/', null, null, true);
} |
这里有几个注意事项:
-
您必须致电session_name()
session_start()之前
-
这也是
将默认路径设置为" /",即
对于Opera是必需的,但是哪个PHP
会话Cookie默认情况下不执行
要么。
请注意,HttpOnly不会停止跨站点脚本编写;相反,它抵消了一种可能的攻击,目前仅在IE上进行(FireFox在XmlHttpRequest中公开HttpOnly cookie,而Safari完全不支持)。一定要打开HttpOnly,但是在进行交易时,甚至不要花费一个小时的输出过滤和模糊测试。
1 2 3 4 5 6 7 8
| <?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手册
1
| setcookie('Foo','Bar',0,'/', 'www.sample.com' , FALSE, TRUE); |
来自Ilia的解释...仅5.2
PHP 5.2中的httpOnly cookie标志支持
如该文章所述,您可以在以前的PHP版本中自行设置标头
1
| header("Set-Cookie: hidden=value; httpOnly"); |
您可以在头文件中使用它。
1 2 3
| // setup session enviroment
ini_set('session.cookie_httponly',1);
ini_set('session.use_only_cookies',1); |
这样,以后所有的会话cookie都将使用httponly。
php_flag命令的正确语法是
1
| php_flag session.cookie_httponly On |
并且要注意,服务器的第一个答案就是设置cookie,然后在此处设置(例如,您可以看到" HttpOnly"指令。因此,为了进行测试,请在每次测试请求后从浏览器中删除cookie。
|