如何在我的PHP apps
as中设置cookie HttpOnly cookies
?
$cookie->setHttpOnly(true);
与github.com/delight-im/PHP-Cookie
如何在我的PHP apps
as中设置cookie HttpOnly cookies
?
$cookie->setHttpOnly(true);
与github.com/delight-im/PHP-Cookie
Answers:
PHPSESSID
默认为),请参见@richie的答案该setcookie()
和setrawcookie()
功能,介绍了httponly
参数,早在PHP 5.2.0的黑暗时代,使这个漂亮和容易。根据语法,只需将第7个参数设置为true
简化功能语法
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" );
set_cookie
如果不需要设置其他参数,我们最终将使调用变得不再那么冗长。例如set_cookie($name, $value, httponly: true)
。
对于Apache上PHP自己的会话cookie:
将其添加到您的Apache配置中,或者.htaccess
<IfModule php5_module>
php_flag session.cookie_httponly on
</IfModule>
只要在before之前调用它,也可以在脚本中设置它session_start()
。
ini_set( 'session.cookie_httponly', 1 );
php.ini
。
php_value
为php_flag
无效。我只是在服务器上尝试过
php_flag
,还必须将值-更改为on
或off
-参见手册。
请注意,httponly
默认情况下不使用PHP会话cookie 。
要做到这一点:
$sess_name = session_name();
if (session_start()) {
setcookie($sess_name, session_id(), null, '/', null, null, true);
}
这里有几个注意事项:
session_name()
之前session_start()
请注意,HttpOnly不会停止跨站点脚本;它不会阻止跨站点脚本。相反,它抵消了一种可能的攻击,目前仅在IE上进行(FireFox在XmlHttpRequest中公开HttpOnly cookie,而Safari完全不接受)。一定要打开HttpOnly,但是在进行交易时,甚至不要放弃一个小时的输出过滤和模糊测试。
来自Ilia的解释...仅5.2
如该文章所述,您可以在以前的PHP版本中自行设置标头
header("Set-Cookie: hidden=value; httpOnly");
您可以在头文件中使用它。
// setup session enviroment
ini_set('session.cookie_httponly',1);
ini_set('session.use_only_cookies',1);
这样,以后所有的会话cookie都将使用httponly。
自PHP> = 7.0以来的更优雅的解决方案
session_start(['cookie_lifetime' => 43200,'cookie_secure' => true,'cookie_httponly' => true]);