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



я загружаю некоторый HTML в iframe, но когда файл, на который ссылается, использует http, а не https, я получаю следующую ошибку:




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




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



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



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

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:

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

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

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

Comments

    Ничего не найдено.