【问题标题】:Cookie still set on HTTP with ini_set('session.cookie_secure',1);Cookie 仍使用 ini_set('session.cookie_secure',1); 在 HTTP 上设置;
【发布时间】:2014-01-17 06:48:13
【问题描述】:

我的配置文件如下所示:

ini_set('session.cookie_secure',1);
ini_set('session.cookie_httponly',1);
ini_set('session.use_only_cookies',1);

session_start();
//database connection part...

当通过https://www.mysite.com/config.php 访问此页面时,“安全”插槽的 PHPSESSID cookie 为空。通过http://www.mysite.com/config.php 访问页面显示完全相同的cookie,具有相同的值。

我是新手,所以也许我错了,但这不应该发生,对吧?我做错了什么?

谢谢!

【问题讨论】:

  • 好吧,您在更改会话设置之前开始您的会话。我希望设置不会生效。
  • 我在 ini_set 部分之后有 session_start 部分,但这也不起作用......我会更新我的问题。
  • 如果您在浏览器首选项中检查 cookie,是否设置了安全标志?
  • 不...它说:“所有连接”。仍然没有弄清楚为什么它没有设置为“安全”...

标签: cookies php php-ini


【解决方案1】:

ini_set 方法需要一个字符串值,因此请将您的代码更新为以下内容:

ini_set('session.cookie_secure', '1');
ini_set('session.cookie_httponly', '1');
ini_set('session.use_only_cookies', '1');

session_start();

【讨论】:

    【解决方案2】:

    无论是 HTTP 还是 HTTPS,会话 id 都会被发送到客户端。您必须在代码中做出这种区分,因为显然 PHP 没有。

    在 http(不是 https)上摆弄这个,让 cookie_secure 设置为 'on'。您将看到 cookie 被传输到客户端。 (在这里使用您最喜欢的 cookie 分析。)但是,在重新加载时,cookie 不会提交回服务器。 cookie_secure - client 将仅通过安全连接传输 cookie。

    <?php
      ini_set('session.cookie_secure','on');
      session_name('test');
      session_start();
      session_regenerate_id();
      echo "test: '".$_COOKIE['test']."'";
    ?>
    

    将设置更改为“关闭”,在第二次重新加载后,您将看到会话 cookie 被传输回服务器。

    验证您是否在安全连接上,甚至应该调用 session_start:

    <?php
      $secure = isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] != "" );
      if(!$secure) {
        $r = "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
        header("Location: $r");
        exit("use https!");
      }
      //if($secure) {
        session_start();
        /* and other secure happenings;;; */
      //}
    ?>
    

    或How to find out if you're using HTTPS without $_SERVER['HTTPS']

    注意:对我来说,这看起来像是 PHP 中的一个安全漏洞,因为会话 ID 将以明文形式传输:根据 OWASP,这正是 SecureFlag 旨在防止的。 https://www.owasp.org/index.php/SecureFlag --- 我使用的是 PHP 5.5.8;也许这是语言的“特征”。该定义似乎只针对客户端而不是服务器。

    【讨论】:

    • 您是否在这些测试之间清除了 cookie?我还认为cookie_secure 设置不起作用,但后来我在 Chrome 的隐身标签中尝试了它,它起作用了。我的服务器正在运行 PHP 5.3.3。
    猜你喜欢
    • 2017-07-13
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 2012-08-21
    • 2021-12-19
    • 2011-10-05
    • 2012-04-15
    • 2012-01-12
    相关资源
    最近更新 更多