你如何设置在PHP中使用HttpOnly cookie

Sco*_*ren 89 php security cookies xss httponly

我如何设置的Cookie在我PHP appsHttpOnly cookies

ric*_*hie 112

对于PHP自己的Apache会话cookie:
将其添加到Apache配置或.htaccess

<IfModule php5_module>
    php_flag session.cookie_httponly on
</IfModule>
Run Code Online (Sandbox Code Playgroud)

这也可以在脚本中设置,只要之前调用它session_start().

ini_set( 'session.cookie_httponly', 1 );
Run Code Online (Sandbox Code Playgroud)

  • 请注意应该使用php_flag:"不要使用php_value来设置布尔值.应该使用php_flag." http://php.net/manual/en/configuration.changes.php (10认同)
  • +1这是一件好事(为安全起见)在整个服务器上都有一个好处,而是添加到`php.ini`. (9认同)
  • @Nate:当更改为`php_flag`时,您还必须将值更改为"on"或"off" - 请参阅手册. (6认同)

Che*_*oft 84

  • 对于您的cookie,请参阅此答案.
  • 对于PHP自己的会话cookie(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 )
Run Code Online (Sandbox Code Playgroud)

输入NULL您希望保留为默认值的参数.您可能还想考虑是否应该设置secure参数.

也可以使用较旧的较低级header()功能:

header( "Set-Cookie: name=value; httpOnly" );
Run Code Online (Sandbox Code Playgroud)

  • 使用 PHP 8 的命名参数,如果我们不需要设置其他参数,我们最终将能够使“set_cookie”调用变得不那么冗长。例如 `set_cookie($name, $value, httponly: true)`。 (4认同)

小智 13

请注意,HttpOnly不会停止跨站点脚本; 相反,它中和了一种可能的攻击,目前仅在IE上执行此操作(FireFox在XmlHttpRequest中暴露HttpOnly cookie,而Safari根本不尊重它).无论如何,打开HttpOnly,但不要在交易中丢弃一小时的输出过滤和模糊测试.

  • 现在,自08年以来,这种情况可能已发生变化.这是一个更新/更新的列表:http://stackoverflow.com/questions/528405/which-browsers-do-support-httponly-cookies (13认同)

小智 13

请注意,httponly默认情况下不使用PHP会话cookie .

要做到这一点:

$sess_name = session_name();
if (session_start()) {
    setcookie($sess_name, session_id(), null, '/', null, null, true);
}
Run Code Online (Sandbox Code Playgroud)

这里有几点需要注意:

  • 你必须调用session_name() 之前session_start()
  • 这也将默认路径设置为'/',这对于Opera是必需的,但是默认情况下哪些PHP会话cookie也没有.

  • http://php.net/manual/en/function.session-set-cookie-params.php它可以通过上面的PHP函数自动完成,而不是自定义编码. (11认同)

Mar*_*ius 6

<?php
//None HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE); 

//HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE); 

?>
Run Code Online (Sandbox Code Playgroud)

资源


Pol*_*nby 5

这里解释来自伊利亚...... 5.2但是

PHP 5.2中的httpOnly cookie标志支持

如该文章所述,您可以在以前版本的PHP中自己设置标题

header("Set-Cookie: hidden=value; httpOnly");
Run Code Online (Sandbox Code Playgroud)


Re0*_*ess 5

您可以在set cookie函数中指定它,请参阅php手册

setcookie('Foo','Bar',0,'/', 'www.sample.com'  , FALSE, TRUE);
Run Code Online (Sandbox Code Playgroud)