【问题标题】:Passing form params through iframe with javascript safe?使用javascript安全通过iframe传递表单参数?
【发布时间】:2010-11-15 00:53:21
【问题描述】:

背景:我已经编写了一个书签 (JavaScript),它将 iframe 附加到您正在查看的当前页面。这个 iframe 的 src 属性指向我的(rails)应用程序上的一个表单。我需要通过修改输入字段的值之一或通过在调用表单操作的 url 末尾将值作为参数传递来将键传递到表单(从小书签)。

我真的不知道如何处理前者,而后者似乎是一场等待发生的安全灾难。我想知道这里的最佳做法是什么?

【问题讨论】:

    标签: javascript ruby-on-rails security forms iframe


    【解决方案1】:

    将查询字符串参数附加到 URL 似乎是合理的,但您是对的 - 存在安全隐患。该值将出现在用户的浏览历史记录中,并且通过未加密的 HTTP(但不是 HTTPS)可见。

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

    【讨论】:

    • 感谢您的回答。如果托管表单的域是 HTTPS,字符串参数是否仍然可见?
    • 不通过网络。我不确定它是否会出现在浏览器历史记录中。
    • 据我所知,这个系统本质上允许你在另一个框架中触发一个事件,它可以用来发送和接收消息。这里有一些好消息:它在 Internet Explorer 9 中得到完全支持。坏消息是我在 Firefox 4 Beta 6 中尝试过它,但它根本不起作用>_>
    • 奇数。我让它在 Firefox 3.6 中工作。也许浏览器仍然使用不同的事件模型;历史上就是这样。
    【解决方案2】:

    这听起来与我使用 iFrame 制作的 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
    }
    

    【讨论】:

    • 嘿,谢谢。这是我计划采用的方法,但我的问题是真正了解使用这种方法传递诸如密钥之类的东西有多安全 - 不一定是如何做到这一点。
    • 如果你使用 JavaScript,它不会是安全的 :p 但通常这应该不是问题,因为你应该在处理表单的服务器上清理数据。
    【解决方案3】:

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

    在webkeys页面上,具体看

    将不可猜测的权限密钥放在片段段中会生成一个 https URL,如下所示:https://www.example.com/app/#mhbqcmmva5ja3

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-19
      • 2017-03-02
      • 1970-01-01
      • 2012-07-25
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      相关资源
      最近更新 更多