【发布时间】: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