跨域脚本在同一个域,不同的子域上

时间:2010-10-18 19:07:19

标签: javascript iframe xss

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

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

另请查看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>