Как разрешить содержимое http в iframe на сайте https
я загружаю некоторый HTML в iframe, но когда файл, на который ссылается, использует http, а не https, я получаю следующую ошибку:
[заблокировано] страница в {current_pagename} запускала небезопасное содержимое из {referenced_filename}
есть ли способ отключить это или любой способ обойти это?
iframe не имеет src атрибут и содержимое задаются с помощью:
frame.open();
frame.write(html);
frame.close();
8 ответов:
исходя из общности этого вопроса, я думаю, что вам нужно будет настроить свой собственный прокси HTTPS на каком-то сервере в интернете. Выполните следующие действия:
- подготовьте прокси-сервер-установите IIS, Apache
- получить действительный сертификат SSL, чтобы избежать ошибок безопасности (бесплатно startssl.com например)
- напишите обертку, которая будет загружать небезопасный контент (как показано ниже)
- С вашего сайта/приложения https://yourproxy.com/?page=http://insecurepage.com
Если вы просто загружаете контент удаленного сайта через file_get_contents или similiar, у вас все еще могут быть небезопасные ссылки на контент. Вы должны будете найти их с регулярным выражением, а также заменить. Изображения трудно решить, но я нашел обходной путь здесь:http://foundationphp.com/tutorials/image_proxy.php
Примечание: хотя это решение, возможно, работало в некоторых браузерах, когда оно было написано в 2014 году, оно больше не работает. Навигация или перенаправление на HTTP-URL в
iframeвстроенный в страницу HTTPS не допускается современными браузерами, даже если фрейм начинался с URL HTTPS.лучшее решение, которое я создал, - это просто использовать google в качестве прокси ssl...
https://www.google.com/search?q=%http://yourhttpsite.com&btnI=Im+Feeling+Luckyпротестировано и работает в firefox.
другой Методы:
использовать сторонних производителей, таких как размещения.лы (но это действительно только хорошо для хорошо известны Апис протоколу HTTP).
создайте свой собственный скрипт перенаправления на странице 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-то есть не входите в какую-либо систему).
реальная проблема заключается в том, что наличие элементов http внутри сайта https представляет собой проблему безопасности. Нет никаких полностью кошерных способов обойти этот риск безопасности, поэтому вышеизложенное - это просто текущие обходные пути.
обратите внимание, что вы можете отключить эту меру безопасности в большинство браузеров (сами, а не для других). Также обратите внимание, что эти "хаки" могут устареть с течением времени.
Я знаю, что это старый пост, но другим решением было бы использовать cURL, например:
редирект.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>это всего лишь минимальный пример, чтобы проиллюстрировать идею - он не дезинфицирует URL-адрес и не мешает кому-то другому использовать перенаправление.PHP для своих целей. Рассмотрим эти вещи в контексте вашего собственного сайта.
плюс, хотя, это больше гибкий. Например, вы можете добавить некоторую проверку данных curl'D$, чтобы убедиться, что это действительно то, что вы хотите, прежде чем отображать его, например, проверить, чтобы убедиться, что это не 404, и иметь альтернативный контент, если он готов.
плюс -- я немного устал полагаться на перенаправление Javascript для чего-либо важного.
Ура!
вы всегда будете получать предупреждения о заблокированном контенте в большинстве браузеров при попытке отображения небезопасного контента на странице https. Это сложно, если вы хотите встроить материал с других сайтов, которые не стоят за ssl. Вы можете отключить предупреждения или удалить блокировку в собственном браузере, но и для других посетителей это проблема.
один из способов сделать это-загрузить контент-сервер и сохранить изображения и другие вещи на свой сервер и отобразить их с протокол https.
вы также можете попробовать использовать такую услугу, как embed.ly и получить содержание через них. У них есть поддержка для получения контента за https.
добавить
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">в головуСсылка:http://thehackernews.com/2015/04/disable-mixed-content-warning.html
совместимость с браузером:http://caniuse.com/#feat=upgradeinsecurerequests
использование Google в качестве прокси SSL в настоящее время не работает,
почему?
если вы открыли любую страницу из google, вы найдете там
вы можете попробовать очистить все, что вам нужно, с помощью PHP или другого языка на стороне сервера, а затем поместить iframe в очищенный контент. Вот пример с PHP:
scrapedcontent.php:
.html:<?php $homepage = file_get_contents('http://www.example.com/'); echo $homepage; ?><iframe src="scrapedcontent.php"></iframe>
Если речь идет о нескольких и редко меняющихся URL-адресах для внедрения в
iframe, вы можете настроить прокси SSL для этого на своем собственном сервере и настроить его так, чтобы одинhttpsURL на вашем сервере сопоставляется с однимhttpURL на проксируемом сервере.например, я бы заглянул в сайту ngrok и mitmproxy для этого, так как они малы и просты в настройке (хотя обычно предназначены для немного разных целей).
Comments