2013-02-07 112 views
1

我有一個旨在嵌入到任何網頁的JavaScript代碼片段。這段代碼將一個表單加載到它所嵌入的頁面中。代碼段然後將表單數據發送到一個安全的URL。問題在於,代碼片段加載表單的頁面可能不安全,但我需要將表單數據安全地傳輸到安全的外部URL。如果可能,我該如何實現?如何將內容從非安全網頁安全發送到安全網址?

+0

安全是指你的意思是HTTPS? – Birla

+0

是的,這就是我的意思。 – Babiker

回答

4

如果表單的ACTION屬性將其指向HTTPS目標,則內容將被加密並安全地傳輸到目標,而不管HTML最初傳輸的格式如何:當用戶提交表單時,瀏覽器啓動新的連接,並針對目的地發出POST請求(我假設你的表單的METHOD是POST,而不是GET),而不是當前的瀏覽器位置。在這種情況下,該POST通過HTTPS發生,因爲目標是「https:// ...」。

這並沒有說明XSS的內在安全風險,也沒有可能嵌入到不安全頁面的內容,或者是在通過JavaScript通過HTTP傳輸時對HTML格式的MITM攻擊......您必須決定這些考慮是否值得您的項目。也許你的JavaScript可以嵌入帶有表單的IFRAME(對IFRAME的SRC使用HTTPS)而不是FORM本身;這是Facebook和其他人爲防止其他腳本在不安全頁面上運行而訪問表單及其數據 - 瀏覽器將根據其同源策略阻止其他腳本的這種嘗試(每個流行的現代瀏覽器都可以依靠做到這一點),並在IFRAME請求時通過HTTPS傳輸表單。當內容需要安全並且無法控制表單嵌入的位置時,這是將表單傳送到任意網站的首選方式。

+0

即使是一個iframe,如果外部頁面覆蓋純HTTP,也會出現[類似風險](http://stackoverflow.com/a/3183176/372643)。 – Bruno

+0

如果您的JS和表單僅通過HTTPS傳輸(並且拒絕訪問HTTP請求),那麼您已盡全力。如果一個MITM通過HTTP截獲了外部頁面,並且重寫了你的JS嵌入來放置一個HTTP IFRAME,它將不會加載你的表單。他們真正能做的就是攔截你的JS,殺死它,並從頭開始注入自己的表單。在這一點上你無能爲力 - 即使你通常沒有以任何方式提供表格,他們也可以重寫頁面並創建一個令人信服的翻版,然後插入它。如果URL錯誤或鎖定圖標丟失,則無論如何每個人都會點擊。 –

+0

事實上,如果外部頁面是普通的HTTP,你不能保證任何東西。 – Bruno

0

這是當您提交的形式,重要的操作URL,因此,如果您的形式使用的https:// URL,它會使POST請求到該網址的形式本身是否是http://https://網頁上。

但是,您還應通過https://提供表單頁面。請參閱first rule of the WASP TLS cheat sheet(此原則不僅適用於登錄頁面,而且適用於任何類似的表單)。

問題是,如果用戶沒有通過地址https://提供表單的頁面,而用戶可以看到驗證,那麼用戶不能相信MITM攻擊者沒有更改此表單。例如,這樣的攻擊者可以透明地替換action屬性以重定向到另一個站點,或者注入一些JavaScript來記錄輸入該表單的所有密鑰,這些密鑰應該用於收集敏感數據。

0

在HTTP頁面上加載的JavaScript將被正在修改您的流量的攻擊者所取代。修改後的JavaScript可以簡單地將數據發佈到公衆處。因此,無法將數據從HTTP頁面安全地傳輸到HTTPS頁面。除非你有我缺少的「安全」的其他定義?