Как разрешить HTTP-контент в iframe на сайте https
Я загружаю некоторый HTML в iframe, но когда файл, на который ссылается, использует http, а не https, я получаю следующую ошибку:
[заблокировано] На странице {current_pagename} запущен небезопасный контент из {referenced_filename}
Есть ли способ отключить это или каким-либо образом обойти его?
В iframe нет атрибута src
, и содержимое устанавливается с помощью:
frame.open();
frame.write(html);
frame.close();
Ответы
Ответ 1
Основываясь на общности этого вопроса, я думаю, вам нужно настроить собственный прокси HTTPS на каком-то сервере в Интернете. Выполните следующие действия:
- Подготовьте свой прокси-сервер - установите IIS, Apache
- Получить действующий SSL-сертификат, чтобы избежать ошибок безопасности (например, без запуска startssl.com)
- Напишите обертку, которая загрузит небезопасный контент (как показано ниже)
- С вашего сайта/приложения получите https://yourproxy.com/?page=http://insecurepage.com
Если вы просто загружаете удаленный контент сайта через file_get_contents или похожий, у вас все еще могут быть небезопасные ссылки на контент. Вам придется найти их с регулярным выражением, а также заменить. Изображения трудно решить, но Ï нашел обходное решение здесь: http://foundationphp.com/tutorials/image_proxy.php
Ответ 2
Примечание: Хотя это решение могло работать в некоторых браузерах, когда оно было написано в 2014 году, оно больше не работает. Навигация или перенаправление на URL-адрес HTTP в iframe
, встроенном в страницу HTTPS, не разрешены современными браузерами, даже если кадр начинался с URL-адреса HTTPS.
Лучшее решение, которое я создал, - просто использовать Google в качестве ssl-прокси...
https://www.google.com/search?q=%http://yourhttpsite.com&btnI=Im+Feeling+Lucky
Проверено и работает в Firefox.
Другие методы:
Используйте стороннее устройство, такое как embed.ly (но это хорошо только для хорошо известных http API).
Создайте свой собственный скрипт перенаправления на странице https, которой вы управляете (простое перенаправление javascript на относительной связанной странице должно помочь. Что-то вроде: (вы можете использовать любой язык/метод)
https://example.com
У этого есть iframe, связывающий с...
https://example.com/utilities/redirect.html
У которого есть простой скрипт перенаправления js, например...
document.location.href ="http://thenonsslsite.com";
Кроме того, вы можете добавить RSS-канал или написать программу чтения/анализа для чтения http-сайта и отображения его на своем https-сайте.
Вы можете/должны также порекомендовать владельцу http-сайта создать ssl-соединение. Если по какой-либо другой причине, кроме , это увеличивает SEO.
Если вы не можете заставить владельца сайта http создать сертификат ssl, наиболее безопасным и постоянным решением будет создание RSS-канала, собирающего необходимый вам контент (возможно, вы на самом деле ничего не делаете на сайте http -that). сказать не входя ни в какую систему).
Реальная проблема заключается в том, что наличие http-элементов на сайте https представляет проблему безопасности. Не существует абсолютно кошерных способов обойти эту угрозу безопасности, поэтому вышесказанное - это просто обходные пути.
Обратите внимание, что вы можете отключить эту меру безопасности в большинстве браузеров (самостоятельно, а не для других). Также обратите внимание, что эти "хаки" могут со временем устареть.
Ответ 3
Я знаю, что это старый пост, но другим решением будет использование cURL, например:
redirect.php:
<?php
if (isset($_GET['url'])) {
$url = $_GET['url'];
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
curl_close($ch);
echo $data;
}
то в вашем теге iframe, например:
<iframe src="/redirect.php?url=http://www.example.com/"></iframe>
Это всего лишь пример MINIMAL, чтобы проиллюстрировать эту идею: она не дезинфицирует URL-адрес и не позволяет кому-то другому использовать redirect.php для своих целей. Рассмотрим эти вещи в контексте вашего собственного сайта.
Однако, наоборот, он более гибкий. Например, вы можете добавить некоторую проверку данных curl'd $, чтобы убедиться, что это действительно то, что вы хотите, перед ее отображением - например, проверить, чтобы убедиться, что это не 404, и иметь альтернативный контент самостоятельно, если он есть.
Плюс - я немного устал полагаться на переадресацию Javascript для чего-то важного.
Ура!
Ответ 4
добавить <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
в голову
reference: http://thehackernews.com/2015/04/disable-mixed-content-warning.html
browser compatibility: http://caniuse.com/#feat=upgradeinsecurerequests
Ответ 5
Вы всегда будете получать предупреждения о заблокированном контенте в большинстве браузеров при попытке отобразить небезопасный контент на странице https. Это сложно, если вы хотите встраивать материал с других сайтов, которые не находятся за пределами ssl. Вы можете отключить предупреждения или удалить блокировку в своем браузере, но для других посетителей это проблема.
Один из способов сделать это - загрузить сервер содержимого и сохранить изображения и другие вещи на свой сервер и отобразить их с https.
Вы также можете попробовать использовать службу, например embed.ly, и получить контент через них. У них есть поддержка для получения контента за https.
Ответ 6
Использование Google в качестве SSL-прокси в настоящее время не работает,
Почему?
Если вы открыли какую-либо страницу из Google, вы обнаружите, что в заголовке есть поле x-frame-options
.
![Google response header]()
Заголовок ответа HTTP X-Frame-Options можно использовать, чтобы указать, следует ли разрешить браузеру отображать страницу в <frame>
, <iframe>
или <object>
. Сайты могут использовать это, чтобы избежать атак с помощью клик-джеккинга, обеспечивая что их содержание не встроено в другие сайты.
(Цитата из MDN)
Одно из решений
Ниже приведены мои решения этой проблемы:
Загрузите контент в AWS S3, и он создаст ссылку https для ресурса.
Примечание. Установите разрешение для файла html, чтобы каждый мог его просматривать.
После этого мы можем использовать его как src
iframe на веб-сайтах https.
![AWS]()
Ответ 7
Вы можете попробовать соскабливать все, что вам нужно, с PHP или другим языком на стороне сервера, а затем помещать iframe в очищенное содержимое. Вот пример с PHP:
scrapedcontent.php:
<?php
$homepage = file_get_contents('http://www.example.com/');
echo $homepage;
?>
index.html
<iframe src="scrapedcontent.php"></iframe>
Ответ 8
Используйте свой собственный обратный прокси-сервер HTTPS-HTTP.
Если в вашем случае используется несколько редко меняющихся URL-адресов для встраивания в iframe
, вы можете просто настроить обратный прокси-сервер для этого на своем собственном сервере и настроить его так, чтобы один URL-адрес https
на вашем сервере соответствовал одному http
URL на прокси-сервере. Поскольку обратный прокси-сервер полностью находится на стороне сервера, браузер не может обнаружить, что он "только" общается с прокси-сервером реального веб-сайта, и, таким образом, не будет жаловаться, поскольку подключение к прокси-серверу правильно использует SSL.
Например, если вы используете Apache2 в качестве веб-сервера, см. эти инструкции, чтобы создать обратный прокси-сервер.