【问题标题】:Session Cookie without HttpOnly flag set没有设置 HttpOnly 标志的会话 Cookie
【发布时间】:2012-10-25 18:35:55
【问题描述】:

我已经建立了一个带有登录系统的网站。准备好后,我使用 Acunetix 对其进行了扫描,但收到以下消息:

没有设置 HttpOnly 标志的会话 Cookie 没有设置安全标志的会话 Cookie(我想这只有在我有 SSL 连接的情况下)

所以我的问题是,如何为我的所有 Session 数据设置 HttpOnly 标志?当我登录用户时,我只是在使用会话。我用他们的用户 ID 号给他们一个会话,然后我使用那个用户 ID 获取数据。

有没有什么简单的方法可以设置所有会话 HTTPOnly 并保护它们,所以没有人可以触摸它们?

【问题讨论】:

    标签: php javascript apache security


    【解决方案1】:

    您可以更改 php.ini 中的设置,或通过ini_set() 调用将session.cookie_securesession.cookie_httponly 的值更改为true

    或者,您可以在开始会话之前使用session_set_cookie_params() 来获得您想要的效果。

    http://us3.php.net/manual/en/function.session-set-cookie-params.php

    【讨论】:

    • 如果我在PHP.ini中设置的话,就安全了,这个问题就解决了吗?
    • 是的,一旦正确设置了两个 ini 值(在 php.ini 中或在运行时通过提到的其他方法),您应该通过安全扫描。
    • 我在 webmin 上查看了我的 php.ini,但没有找到类似 session.cookie_httponly 的东西 :( 我有 5.2 版,可以吗?
    • 可能是您的 php 安装没有在 ini 中明确设置(或者您正在查看错误的 ini 文件 - 就像某些安装中的 CLI 目录中的那样)。该值从 PHP 5.2.0 开始可用,因此即使不在您的 ini 文件中,您也可以为其添加一行,或者只是在运行时更改。
    • 谢谢。但是我可以在非 SSL 域中使用 session.cookie_secure 吗?
    【解决方案2】:

    你应该查看this excellent site 这个问题。归结为在 php.ini 的会话部分中设置它(或通过适当的运行时函数):

    session.cookie_httponly = True
    

    【讨论】:

      【解决方案3】:

      当您使用 PHP 的 setcookie 时,您也可以将 httponly 标志设置为 false

      // params: name, value, expiration, path, domain, secure, http-only
      setcookie('session-cookie-key', 'data', 0, '/', 'example.com', true, false);
      

      【讨论】:

        猜你喜欢
        • 2011-12-29
        • 2012-10-13
        • 1970-01-01
        • 2017-02-04
        • 1970-01-01
        • 1970-01-01
        • 2011-02-28
        • 2015-02-09
        • 2012-05-18
        相关资源
        最近更新 更多