2011-06-16 67 views
1

我有一個混合我網站的HTTP/HTTPS部分的問題,這有點難以解釋。基本上,該網站的結構使得:檢查安全Cookie並將HTTPS模式中的非HTTPS父級重定向到

  • 首頁和公共內容頁面通過HTTP發送
  • 需要授權的所有頁面通過HTTPS

我加入了「記住發送「功能發送給會話密鑰的會話密鑰在安全 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/模態窗口加載嘗試它的父窗口上執行JS功能,http://somewhere.com


所以,我在簡短形式的兩難境地:

  • 不安全頁面包含指向一個模式登錄窗口,它通過HTTPS加載
  • 模態登錄窗口可以檢查會話密鑰的cookie,因爲它是通過安全連接發送
  • 模態登錄窗口無法告訴其父母關閉JS,但是,因爲它是通過不同的協議加載的
  • 模態登錄窗口無法加載通過不安全的連接。這會讓JS訪問父級,但是安全cookie將不可用。

如果我的問題有足夠的意義,我想知道:有沒有辦法解決這個令人沮喪的問題?或者我只是想通過HTTPS加載整個站點(包括公共和私有部分)?

+0

你可以告訴父母關閉窗口。可以調用回調函數。父母將具有關閉模式的功能,並且您將在模態窗口內傳遞迴調。最後,模態會調用父母的功能。 – 2011-06-16 21:57:40

回答

0

我找到了解決方案!這可能不是最優雅的,但它可以工作並保持相同的安全級別,據我所知。

  • 在登錄時,存儲兩個餅乾。
    1. 安全cookie包含會話密鑰
    2. 不安全的cookie存儲的 '授權' 狀態:truefalse
  • 在不安全的頁面,檢查是否有不安全的cookie。
    • 如果不安全的cookie的值是true假設用戶被授權和顯示鏈接到安全的「我的帳戶」頁面(非模態)。
    • 一旦用戶通過HTTPS訪問「我的帳戶」頁面,就會檢查安全Cookie。如果一切正常,頁面將正常顯示。如果會話密鑰不存在或不驗證,則兩個cookie都將被刪除,用戶將重定向到主頁。
  • 在安全頁面上,進程保持不變 - 對安全會話密鑰cookie執行檢查。
  • 在註銷時,使這兩個cookie無效。
相關問題