Межсайтовый скриптинг в одном домене, разных поддоменах - PullRequest
5 голосов
/ 18 октября 2010

У меня есть iframe, который я использую для добавления контента, размещенного сторонним поставщиком, на наш сайт. Мы пытаемся определить высоту этого контента, чтобы настроить высоту iframe, но я получаю ошибки межсайтового скриптинга. Я не знал, что субдомены считаются кросс-сайтом. Есть ли способ обойти это без необходимости держать их на соответствующих поддоменах?

Для справки, наш еженедельный маркетинг размещается у стороннего поставщика во флэш-памяти, но с субдоменом мы можем перенаправлять его, сохраняя пользователя на наших доменах для целей cookie.

Ответы [ 2 ]

4 голосов
/ 18 октября 2010

В одном из своих поддоменов вы можете (за некоторыми исключениями) настроить домен, чтобы разрешить более широкий доступ к другим поддоменам в том же основном домене.

Посмотрите на эту страницу: http://www.tomhoppe.com/index.php/2008/03/cross-sub-domain-javascript-ajax-iframe-etc/

3 голосов
/ 19 октября 2010

Также взгляните на обмен сообщениями между окнами

Эта первая страница является отправителем - она ​​вызывает 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>
...