Как разрешить содержимое http в iframe на сайте https

я загружаю https://over.wiki/html/" class="blnk">HTML в iframe, но когда файл, на который ссылаются, использует http, а не https, я получаю следующую ошибку:

[заблокировано] страница в {current_pagename} запустила небезопасное содержимое из {referenced_filename}

есть ли способ отключить это или как-то обойти это?

iframe не имеет src атрибут и содержимое устанавливаются с помощью:

frame.open();
frame.write(html);
frame.close();

8 ответов


основываясь на общности этого вопроса, я думаю, что вам нужно будет настроить свой собственный HTTPS-прокси на каком-то сервере в интернете. Выполните следующие действия:

  • подготовьте прокси-сервер-установите IIS, Apache
  • получить действительный сертификат SSL, чтобы избежать ошибок безопасности (без startssl.com например)
  • напишите обертку, которая будет загружать небезопасный контент (как показано ниже)
  • С вашего сайта / app получить https://yourproxy.com/?page=http://insecurepage.com

Если вы просто загружаете контент удаленного сайта через file_get_contents или similiar, у вас все еще могут быть небезопасные ссылки на контент. Вам придется найти их с regex и заменить. Изображения трудно решить, но Ï нашел обходной путь здесь:http://foundationphp.com/tutorials/image_proxy.php


Примечание: хотя это решение могло работать в некоторых браузерах, когда оно было написано в 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-то есть не входите в какую-либо систему).

реальная проблема заключается в том, что наличие элементов 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, и иметь альтернативный контент, если он готов.

Plus -- я немного устал полагаться на перенаправление 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:

<?php
$homepage = file_get_contents('http://www.example.com/');
echo $homepage;
?>
.HTML-код:
<iframe src="scrapedcontent.php"></iframe>

Если речь идет о нескольких и редко меняющихся URL-адресах для вставки в iframe, вы можете настроить SSL-прокси для этого на своем собственном сервере и настроить его так, чтобы один https URL на вашем сервере сопоставляется с one http URL на проксируемый сервер.

например, я бы посмотрел на сайту ngrok и mitmproxy для этого, так как они малы и просты в настройке (хотя обычно предназначены для немного разных целей).