关于安全性:如何在PHP中设置使用HttpOnly cookie

关于安全性:如何在PHP中设置使用HttpOnly cookie

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。


推荐阅读

    linux命令设置中文?

    linux命令设置中文?,系统,工作,数据,管理,设备,环境,标的,第一,网上,模式,lin

    设置网址命令linux?

    设置网址命令linux?,地址,系统,网络,代码,网址,密码,信息,电脑,管理,基础,lin

    linux的配置网络命令?

    linux的配置网络命令?,地址,系统,网络,代码,服务,管理,密码,信息,基础,命令,l

    linux设置日期命令?

    linux设置日期命令?,时间,系统,标准,命令,信息,大陆,国家,日期,时钟,时区,详

    linux设置时钟命令?

    linux设置时钟命令?,时间,系统,服务,图片,命令,网络,信息,风险,国家,大陆,lin

    linux命令长度设置?

    linux命令长度设置?,地址,工作,命令,管理,环境,系统,信息,目录,文件,参数,Lin

    linux内核配置的命令?

    linux内核配置的命令?,系统,工作,管理,地址,时间,命令,信息,设备,目录,内核,

    linux双ip设置命令?

    linux双ip设置命令?,地址,系统,代码,网络,设备,服务,通讯,名称,信息,密码,lin

    linux挂载命令配置?

    linux挂载命令配置?,系统,网络,设备,服务,位置,电脑,名字,密码,目录,命令,Lin

    linux用户组命令设置?

    linux用户组命令设置?,管理,系统,密码,代码,电脑,用户组,用户,软件,新增,命

    linux防火墙配置命令?

    linux防火墙配置命令?,系统,工具,服务,状态,防火墙,通用,密码,信息,网络,管

    linux磁盘配置命令行?

    linux磁盘配置命令行?,信息,系统,管理,状态,环境,电脑,名称,数据,名字,情况,l

    linux配置寄存器命令?

    linux配置寄存器命令?,地址,系统,信息,工作,状态,设备,第一,数据,标的,命令,l

    linux密钥设置命令?

    linux密钥设置命令?,密码,服务,数据,认证,环境,官网,系统,概念,通信,管理,如

    命令行怎么设置linux?

    命令行怎么设置linux?,系统,工作,命令,密码,信息,地方,工具,终端,文件,目录,

    linux配置vim命令?

    linux配置vim命令?,时间,系统,标的,状态,软件,电脑,名单,图片,数据,密码,LINU

    linux内核设置命令?

    linux内核设置命令?,系统,信息,工作,管理,地址,命令,名称,情况,发行,目录,如

    linux命令中配置ip?

    linux命令中配置ip?,地址,系统,代码,信息,网络,密码,设备,命令,网关,终端,如

    linux命令查系统配置?

    linux命令查系统配置?,信息,系统,网络,技术指标,状态,命令,电脑,地址,服务,