【问题标题】:Checking for a secure cookie and redirecting a non-HTTPS parent inside an HTTPS modal检查安全 cookie 并在 HTTPS 模式内重定向非 HTTPS 父级
【发布时间】:2011-09-16 00:54:15
【问题描述】:

我在混合我的网站的 HTTP/HTTPS 部分时遇到了问题,这有点难以解释。基本上,该网站的结构是:

  • 主页和公共内容页面通过 HTTP 发送
  • 所有需要授权的页面都通过 HTTPS 发送

我正在向站点添加“记住我”功能,其中会话密钥在 secure cookie 中发送给用户。这对站点的授权区域 (HTTPS) 非常有效——我可以删除用户的 PHP 会话,当我再次访问这些授权页面时,它将由安全会话密钥 cookie 重新创建。

我在未加密发送的网站页面上有一个登录按钮。这个登录按钮启动一个模态窗口,这个模态窗口的内容通过 HTTPS 传输。安全会话密钥 cookie 在此模式窗口的请求中发送,因为它通过安全连接。 如果检测到此会话密钥 cookie,我需要关闭模态窗口并将父页面重定向到站点的授权部分。

// this script running on https://somewhere.com/account/ in an iframe
// whose parent is http://somewhere.com/ (non-HTTPS)
<?php if ( $already_authorized ): ?>
    <script type="text/javascript">
        $(document).ready(function redirectParent() {
            parent.jQuery.fancybox.close();
            parent.window.location.href = 'https://somewhere.com/account/';
        });
    </script>
<?php endif ?>

不过,由于从https://somewhere.com/account/ 加载的模态窗口试图在其父窗口http://somewhere.com 上执行 JS 函数,因此我遇到了跨域脚本预防问题。


所以,简而言之,我的困境:

  • 不安全的页面包含指向模式登录窗口的链接,该窗口通过 HTTPS 加载
  • 模式登录窗口可以检查会话密钥 cookie,因为它是通过安全连接发送的
  • 但是,模式登录窗口无法告诉其父窗口使用 JS 关闭,因为它是通过不同的协议加载的
  • 无法通过不安全的连接加载模式登录窗口。这将使 JS 可以访问父级,但是安全 cookie 将不可用。

如果我的问题足够有道理,我想知道:有没有办法解决这个令人沮丧的问题?还是我最终会通过 HTTPS 加载整个网站(公共和私人部分)?

【问题讨论】:

  • 您可以告诉父级关闭窗口。可以调用回调函数。父级将具有关闭模式的功能,您将在模式窗口内传递回调。最后,模态将调用父函数。

标签: php javascript security cookies https


【解决方案1】:

我找到了解决办法!它可能不是最优雅的,但据我所知,它可以工作并保持相同级别的安全性。

  • 登录时,存储 两个 cookie。
    1. 包含会话密钥的安全 cookie
    2. 存储“授权”状态的不安全 cookie:truefalse
  • 在不安全的页面上,检查不安全的 cookie。
    • 如果不安全 cookie 的值为 true假定用户已获得授权并显示指向安全“我的帐户”页面的链接(非模态)。
    • 一旦用户通过 HTTPS 访问“我的帐户”页面,就会检查安全 cookie。如果一切正常,页面将正常显示。如果会话密钥不存在或未验证,则删除两个 cookie,并将用户重定向到主页。
  • 在安全页面上,该过程保持不变 - 检查安全会话密钥 cookie。
  • 注销时,使两个 cookie 无效。

【讨论】:

    猜你喜欢
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多