2010-11-15 60 views
0

背景:我写了一个bookmarklet(JavaScript),它将iframe添加到您正在查看的当前页面。此iframe的src属性指向我的(rails)应用程序的表单。我需要通过修改其中一个输入字段的值或者通过将值作为参数传递给调用表单操作的url的末尾来将密钥传递给表单(来自小书签)。通过iframe与JavaScript安全传递形式参数?

我真的不知道如何做前者,后者看起来像是一个等待发生的安全灾难。我想知道在这里最好的做法是什么?

回答

2

追加查询字符串参数的URL似乎是合理的,但你是正确的 - 有安全隐患。该值将显示在用户的浏览历史记录中,并且会通过未加密的HTTP(而不是HTTPS)显示。

还有另一种基于Javascript的方式来做到这一点,但尚未得到广泛支持,但值得考虑 - window.postMessage。它允许指定域的页面使用熟悉的基于事件的模型发送和接收消息。见https://developer.mozilla.org/en/DOM/window.postMessage

+0

感谢您的回答..如果托管表单的域名是HTTPS,字符串参数是否仍然可见? – anxiety 2010-11-15 02:17:40

+0

不在网络上。我不确定它是否会出现在浏览器历史记录中。 – harto 2010-11-15 04:27:07

+0

从我能做出的这个系统中,它基本上允许你在另一个框架中触发一个事件,它可以用来发送和接收消息。下面是一些好消息:它在Internet Explorer 9中得到了全面支持。坏消息是我在Firefox 4 Beta 6中尝试过,它根本无法工作> _> – 2010-11-17 19:50:28

1

这听起来与我使用iFrames制作的AJAX框架非常相似。最简单的方法是让你的小书签建立一个查询字符串并把它放在iFrame的src上。如果你需要改变任何东西,你应该能够将iFrame的src设置为“#param = value”,并让iFrame中的页面注册onhashchange事件来处理它(这将是你如何去处理前者)
所以,你的代码可能或者是:

var iframe = document.createElement('iframe'); 
iframe.src = "http://example.com/mypage?param1=value1&param2=value2"; 
document.body.appendChild(iframe); 

和/或:

iframe.src = "#param1=value1"; 
// This in the iframe: 
document.onhashchange = function() { 
    // parse location.hash and process form 
} 
+0

嘿谢谢。这是我计划采取的方法,但我的问题是真正了解如何通过这种方法传递像密钥这样的东西 - 不一定如何去做。 – anxiety 2010-11-15 01:28:20

+0

如果您使用JavaScript,它不会是安全的:p但通常这不应该是一个问题,因为您应该在处理表单的服务器上清理数据。 – 2010-11-15 02:14:54

0

许多方案在URL的片段部分传递秘密,然后在页面加载的早期将其存储并将片段设置为空白。我认为webkeys这样做。

在webkeys页面,具体参见

把难以猜测的许可密钥在片段段产生,看起来像一个HTTPS URL:https://www.example.com/app/#mhbqcmmva5ja3