Разрешение HTTP iFrame вызывать JavaScript на родительском фрейме HTTPS - PullRequest
6 голосов
/ 26 июля 2010

У меня есть страница https (https://example.com/main.php), в которой есть iframe с источником, отличным от https (http://example.com/inner.php).). Оба файла находятся на одном и том же сервере - только один доступен с помощью https, а другой - нет. Мне нужна страница, отличная от https, чтобы иметь возможность выполнять javascript на странице https main.php, используя такой код, как parent.myfunction()

Однако, когда я пытаюсь это сделать, я получаю следующую ошибку:

Небезопасная попытка JavaScript получить доступ к фрейму с URL https://example.com/main.php из фрейма с URL http://example.com/inner.php. Домены, протоколы и порты должны совпадать.

Я установил document.domain = 'example.com' для обоих файлов, и я подумал, что это исправит, но это не так. Есть ли способ разрешить фрейму выполнять javascripts на родительском фрейме и наоборот? Если да, то каковы последствия этого для безопасности?

PS: Для тех из вас, кто предложит использовать https или http для обеих страниц, я изучаю это. Однако из-за процессов, происходящих на странице iframe, это может быть неосуществимым из-за проблем с нагрузкой на сервер.

Ответы [ 3 ]

5 голосов
/ 26 июля 2010

Если бы когда-либо можно было выполнить то, что вы просите, ни один защищенный SSL-сайт никогда не был бы безопасным.

Позвольте мне описать проблему.Допустим, пользователь Алиса заходит в свой аккаунт на Paypal.com.Я, Мэллори, нахожусь между Пайпалом и Алисой.Когда Алиса получает доступ к Paypal, я перехватываю ее запрос и возвращаю страницу, содержащую две вещи: одну рамку с https://paypal.com, и одну, содержащую страницу, предполагающую «http://my.paypal.com',», которую я создал сам.Кадр HTTPS хорошо проверяет, потому что он на самом деле пришел от Paypal.Фрейм HTTP содержит некоторый Javascript моего устройства, который войдет в фрейм HTTPS, и когда Алиса введет свой пароль, он отправит его мне!

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

5 голосов
/ 26 июля 2010

«Политика одинакового происхождения» охватывает протокол («http» или «https»), имя хоста и номер порта. Все они должны совпадать, иначе вы проиграете.

Если нагрузка на ваш сервер действительно будет зависеть от необходимости применять шифрование к странице <iframe>, то я подозреваю, что у вас есть другие, гораздо более серьезные проблемы. В этот день и век это действительно не должно быть проблемой. Если у вас сайт с очень большим трафиком, то, вероятно, вам все равно следует использовать внешний интерфейс для выполнения SSL.

0 голосов
/ 26 июля 2010

Вы не можете делать междоменный / кросс-протокол / кросс-порт доступ с помощью JavaScript. Это называется «междоменными сценариями», что является проблемой, поскольку без такой защиты я мог бы открыть GMail в iframe, получить текстовые поля «u» и «p» и получить такую ​​информацию для входа пользователя.

То, что вы положили в свой PS, является единственным реальным решением, которое вы можете использовать, кроме использования эхо-сервера ... что было бы излишним.

...