2012-05-24 60 views
2

我在業餘時間一直在使用web應用程序。混合HTTP/HTTPS網站的集成問題

它主要面向公開發布/消費內容,因此內容預計將公開顯示並通過http。它還允許/包含第三方小部件,因此需要http訪問(許多供應商沒有https版本,然後在https頁面上存在http混合內容問題)。由於這個和其他一些商業目標,99%的網站必須在http上可用。

的鎖定方案到目前爲止,我已經實現的是:

  • 一切都在同一個域
  • 一切都在/佔到&/API通過HTTPS處理,以https-只有餅乾。只有這些安全會話ID才能用於寫入或訪問個人可識別的資料。
  • 其他一切都通過http處理,並與一組單獨的http cookie一起處理。這些cookie在很大程度上是基於瀏覽器的JavaScript定製,而不是「寫」,或看到敏感的內容)

這使我的問題...

如果有人想進行書籤或社會活動在web應用程序中,它需要通過HTTPS通道發生 - 使用HTTPS cookie等 - 但瀏覽器的同源策略將http和https視爲兩個不同的服務器。

我想要考慮有效的(並且最好是簡單的)方法來允許從HTTP內容到HTTPS服務器的API調用。我的第一個想法是使用JSONP,但我需要會話cookie - 這對我來說是不可見的。

有沒有人有一些建議?

回答

3

讓我試着瞭解您的工作流程:您的HTTP頁面必須調用HTTPS服務器,而HTTPS服務器又會訪問會話cookie,並且您需要HTTP頁面可以訪問該響應,這是否正確?

這樣做的一種方法是使用單獨的iframe來託管將與服務器通信的腳本,並使主頁和iframe使用HTML5 postMessage進行通信。因此,實現上述工作流程的步驟如下:

  1. 您使用postMessage與iframe,(序列化)的請求參數;
  2. iframe的消息回調接收到請求,確認它來自您的頁面,並向服務器提交Ajax請求(通過會話cookie);
  3. 收到響應後,序列化並使用postMessage發送到主頁面;
  4. 主頁面的消息回調接收到響應並對它做些什麼。

這不應該很難在單個函數調用中封裝。這裏最棘手的部分是上面的粗體部分:如果iframe中的腳本沒有正確確認請求來自正確的頁面,則可能會產生CSRF漏洞(惡意頁面可能會將安全腳本嵌入到iframe中,發送請求並且,只要用戶在發生這種情況時進行身份驗證,iframe就會遵守請求)。

對於這個問題,不幸的是我很少有建議。總體而言,在HTTPS頁面中嵌入HTTPS內容是一個壞主意,但由於您有理由這樣做,因此您還應該處理安全問題。