ограничить скрипт внутри iframe для запуска только на страницах одного домена верхнего уровня - PullRequest
0 голосов
/ 14 апреля 2010

Я бы хотел применить требование, чтобы клиентский скрипт внутри страницы (который, в свою очередь, загружался в iframe другой страницы) запускался только тогда, когда родительская страница находится в том же домене верхнего уровня, что и страница в рамке ( хотя это может быть на другом имени хоста в этом домене). Это выполнимо?

Я предполагаю, что простое решение взглянуть на top.location.host не будет доступно из-за ограничений межсайтового скриптинга, но мне интересно, могут ли подойти другие хакеры javascript.

Ограничения на любое потенциальное решение, включая:

Мне нужно иметь возможность выполнять XmlHttpRequest внутри дочерней страницы, и мне нужно проверить, что имя хоста находится в том же домене до того, как я сделаю эти вызовы. (Это затрудняет решение document.domain , поскольку настройка AFAIK document.domain отключает возможность выполнения XmlHttpRequest вызовов.

Я могу управлять сценарием на стороне клиента и HTML-кодом как на родительском, так и на дочернем уровне (и при необходимости могу создавать новые страницы), но не могу вносить какие-либо изменения в код на стороне сервера.

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

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

На самом деле мне не нужен доступ к любому интерфейсу внутри IFrame - iframe невидим, и я использую его только для запуска javascript в контексте безопасности сайта на имени хоста, отличном от родительской страницы.

Так что на данный момент я в тупике. Есть идеи? Я хочу убедиться, что я не пропускаю простое решение, прежде чем сдаться.

Ответы [ 2 ]

1 голос
/ 15 апреля 2010

настройка document.domain отключает возможность совершать вызовы XmlHttpRequest

Это неправда, я делал это много раз. Если вы контролируете оба домена, почему, вы можете использовать его.

Кроме того, если вам удобнее ограничивать браузеры до FF3 + и IE8 + (да, тот, о котором вы думаете, тоже делает это), вы можете использовать postMessage, очень классную функцию HTML5, которая позволяет передавать сообщения из окна в окно. .

0 голосов
/ 15 апреля 2010

Это действительно должно быть сделано браузером. Усилия по решению этой проблемы восходят к 2007 году или около того:

Эта функциональность необходима для всех элементов DOM. Т.е. вы должны быть в состоянии указать, что javascript под любым элементом DOM не должен выполняться. Вы также должны быть в состоянии указать, что запросы ресурсов под определенным элементом DOM ограничены определенными доменами и т. Д. Вместе это поможет ослабить атаки XSS и CSRF.

В любом случае, не задерживайте дыхание.

...