背景:我寫了一個bookmarklet(JavaScript),它將iframe添加到您正在查看的當前頁面。此iframe的src屬性指向我的(rails)應用程序的表單。我需要通過修改其中一個輸入字段的值或者通過將值作爲參數傳遞給調用表單操作的url的末尾來將密鑰傳遞給表單(來自小書籤)。通過iframe與JavaScript安全傳遞形式參數?
我真的不知道如何做前者,後者看起來像是一個等待發生的安全災難。我想知道在這裏最好的做法是什麼?
背景:我寫了一個bookmarklet(JavaScript),它將iframe添加到您正在查看的當前頁面。此iframe的src屬性指向我的(rails)應用程序的表單。我需要通過修改其中一個輸入字段的值或者通過將值作爲參數傳遞給調用表單操作的url的末尾來將密鑰傳遞給表單(來自小書籤)。通過iframe與JavaScript安全傳遞形式參數?
我真的不知道如何做前者,後者看起來像是一個等待發生的安全災難。我想知道在這裏最好的做法是什麼?
追加查詢字符串參數的URL似乎是合理的,但你是正確的 - 有安全隱患。該值將顯示在用戶的瀏覽歷史記錄中,並且會通過未加密的HTTP(而不是HTTPS)顯示。
還有另一種基於Javascript的方式來做到這一點,但尚未得到廣泛支持,但值得考慮 - window.postMessage
。它允許指定域的頁面使用熟悉的基於事件的模型發送和接收消息。見https://developer.mozilla.org/en/DOM/window.postMessage。
這聽起來與我使用iFrames製作的AJAX框架非常相似。最簡單的方法是讓你的小書籤建立一個查詢字符串並把它放在iFrame的src上。如果你需要改變任何東西,你應該能夠將iFrame的src設置爲「#param = value」,並讓iFrame中的頁面註冊onhashchange事件來處理它(這將是你如何去處理前者)
所以,你的代碼可能或者是:
var iframe = document.createElement('iframe');
iframe.src = "http://example.com/mypage?param1=value1¶m2=value2";
document.body.appendChild(iframe);
和/或:
iframe.src = "#param1=value1";
// This in the iframe:
document.onhashchange = function() {
// parse location.hash and process form
}
嘿謝謝。這是我計劃採取的方法,但我的問題是真正瞭解如何通過這種方法傳遞像密鑰這樣的東西 - 不一定如何去做。 – anxiety 2010-11-15 01:28:20
如果您使用JavaScript,它不會是安全的:p但通常這不應該是一個問題,因爲您應該在處理表單的服務器上清理數據。 – 2010-11-15 02:14:54
許多方案在URL的片段部分傳遞祕密,然後在頁面加載的早期將其存儲並將片段設置爲空白。我認爲webkeys這樣做。
在webkeys頁面,具體參見
把難以猜測的許可密鑰在片段段產生,看起來像一個HTTPS URL:https://www.example.com/app/#mhbqcmmva5ja3。
感謝您的回答..如果託管表單的域名是HTTPS,字符串參數是否仍然可見? – anxiety 2010-11-15 02:17:40
不在網絡上。我不確定它是否會出現在瀏覽器歷史記錄中。 – harto 2010-11-15 04:27:07
從我能做出的這個系統中,它基本上允許你在另一個框架中觸發一個事件,它可以用來發送和接收消息。下面是一些好消息:它在Internet Explorer 9中得到了全面支持。壞消息是我在Firefox 4 Beta 6中嘗試過,它根本無法工作> _> – 2010-11-17 19:50:28