2010-03-16 49 views
9

我有一個來自客戶端的請求,希望他們現有的其中一個表單存在於另一個網站上。iframe非SSL網站上的SSL安全表單

他們希望在iframe中有付款表單。

如果在支付處理過程中將SSL網站設置爲非SSL網站,會有什麼影響?

+1

@Kevin:歡迎來到StackOverflow :)下面是可能指向一些需要考慮的事項的相關問題:http://stackoverflow.com/questions/2356080/ssl-login-in-iframe – 2010-03-16 20:43:33

回答

5

你的用戶的瀏覽器會給他們安全警告,基本上說這是一個不安全的場景。例如,中間人攻擊可能會將JavaScript注入到您的非SSL頁面中,現在您可能已被泄露。

在這種情況下,彈出頁面或平面頁面重定向是執行此操作的適當方式。正如您可能非常瞭解的那樣,您希望瀏覽器中的100%內容能夠通過SSL託管在這種場景中。否則,你根本不能保證受到保護。這是警告的原因。

+0

這就是我的想法。我剛纔告訴我們,SSL也可以保護第二個站點。這應該讓我們擺脫不安全的內容警告。謝謝。 – Kevin 2010-03-16 20:44:10

6

現代網絡瀏覽器不會給出任何安全警告,因爲父窗口通過HTTP運行不安全。儘管如此,您的Web瀏覽器不會在地址欄中顯示安全的鎖圖標,因爲安全內容位於子窗口(iframe)內部,因此您的用戶可能會害怕該表單可能不安全。

由於所有網絡瀏覽器(經典的& modern)都拒絕通過Javascript訪問iframe內容,因爲iframe使用不同的協議和/或域名,所以不太可能發生中間人攻擊。此時與iframe通信的唯一方法是通過現代Web瀏覽器中實現的postMessage函數,該函數允許通過Javascript進行跨域通信。即使您使用的是postMessage,iframe也需要包含偵聽來自父窗口的postMessage事件的代碼,在iframe中開發付款表單的情況下,只有父窗口需要在事件發生後偵聽事件付款已處理。因此,如果通過postMessage單向保持通信(iframe僅執行postMessage,而父節點偵聽消息),則中間人攻擊很可能不會發生。

當然,任何人都可以重寫事件監聽器並在父窗口上執行代碼,欺騙服務器認爲已經處理了付款。那就是當你需要在你的服務器端代碼中採取預防措施來檢查確認事務確實發生了合法。就我而言,我的付款單(iframe)在數據庫中創建一個臨時密鑰,並通過postMessage將該密鑰發送到父窗口。然後,父窗口對服務器進行AJAX調用,檢查數據庫以查看密鑰是否匹配,並在創建事務確實發生的記錄之前快速刪除密鑰。