【问题标题】:Cross site scripting on the same domain, different sub domains在同一个域,不同子域上的跨站点脚本
【发布时间】:2010-10-18 19:07:18
【问题描述】:

我有一个 iframe,用于将第三方供应商托管的一些内容拉入我们的网站。我们正在尝试确定该内容的高度以调整 iframe 高度,但我遇到了跨站点脚本错误。我不知道子域算作跨站点。有没有办法解决这个问题而不必让它们保持在匹配的子域上?

作为参考,我们的每周营销活动由 Flash 中的第 3 方供应商托管,但通过子域,我们可以重定向到它们,同时将用户保留在我们的域中以用于 cookie 目的。

【问题讨论】:

    标签: javascript iframe xss


    【解决方案1】:

    从您的一个子域中,您可以(除了一些例外)设置域以允许更广泛地访问同一主域中的其他子域。

    看看这个页面: http://www.tomhoppe.com/index.php/2008/03/cross-sub-domain-javascript-ajax-iframe-etc/

    【讨论】:

    • 与我合作的供应商并没有立即同意这一点,但我对此进行了测试并且它有效,所以我知道这至少有效。谢谢!
    【解决方案2】:

    也可以看看cross window messaging

    第一页是发送者 - 它正在调用 postMessage(发送文本消息)并且还保存着接收窗口所在的 iframe。

    <iframe src="http://dev.jquery.com/~john/message/" id="iframe"></iframe>
    <form id="form">
      <input type="text" id="msg" value="Message to send"/>
      <input type="submit"/>
    </form>
    <script>
    window.onload = function(){
            var win = document.getElementById("iframe").contentWindow;
            document.getElementById("form").onsubmit = function(e){
                    win.postMessage( document.getElementById("msg").value );
                    e.preventDefault();
            };
    };
    </script>
    

    后续页面是接收者 - 它绑定了一个事件侦听器,用于监视传递给它的消息并将它们注入到 DOM 中。

    <b>This iframe is located on dev.jquery.com</b>
    <div id="test">Send me a message!</div>
    <script>
    document.addEventListener("message", function(e){
            document.getElementById("test").textContent =
                    e.domain + " said: " + e.data;
    }, false);
    </script>
    

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
    • 当然.. 但是在这里我必须从页面中复制很多内容来显示示例。
    猜你喜欢
    • 2012-03-18
    • 1970-01-01
    • 2011-12-10
    • 2012-02-15
    • 2017-12-21
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2015-02-24
    相关资源
    最近更新 更多