html - site - se ha bloqueado la carga del contenido activo mixto
Cómo permitir el contenido http dentro de un iframe en un sitio https (8)
Cargué algo de HTML en un iframe, pero cuando un archivo al que se hace referencia utiliza http, no https, aparece el siguiente error:
[bloqueado] La página en {current_pagename} publicó contenido inseguro desde {referenced_filename}
¿Hay alguna forma de desactivarlo o de cualquier forma para evitarlo?
El iframe no tiene ningún atributo src
y los contenidos se establecen usando:
frame.open();
frame.write(html);
frame.close();
Nota: Si bien esta solución puede haber funcionado en algunos navegadores cuando se escribió en 2014, ya no funciona. Los navegadores modernos no permiten navegar o redirigir a una URL HTTP en un
iframe
incrustado en una página HTTPS, incluso si el marco comenzó con una URL HTTPS.
La mejor solución que he creado es simplemente usar google como el proxy ssl ...
https://www.google.com/search?q=%http://yourhttpsite.com&btnI=Im+Feeling+Lucky
Probado y funciona en Firefox.
Otros metodos:
Use un tercero como embed.ly (pero realmente solo es bueno para conocidas API http).
Cree su propia secuencia de comandos de redirección en una página https que controle (un simple redireccionamiento de JavaScript en una página vinculada relacionada debería ser el truco. Algo como: (puede usar cualquier lenguaje / método)
https://example.com
Que tiene un iframe que se vincula a ...https://example.com/utilities/redirect.html
Que tiene un script de redirección js simple como ...document.location.href ="http://thenonsslsite.com";
Alternativamente, puede agregar una fuente RSS o escribir algún lector / analizador para leer el sitio http y mostrarlo en su sitio https.
También podría / debería recomendar al propietario del sitio http que creen una conexión SSL. Si no es por otra razón que aumenta seo .
A menos que pueda conseguir que el propietario del sitio http cree un certificado SSL, la solución más segura y permanente sería crear un feed RSS que grabe el contenido que necesita (presumiblemente no está ''haciendo'' nada en el sitio http, es decir, digamos que no inicia sesión en ningún sistema).
El verdadero problema es que tener elementos http dentro de un sitio https representa un problema de seguridad. No existen formas totalmente kosher de este riesgo de seguridad, por lo que lo anterior es solo una solución actual.
Tenga en cuenta que puede desactivar esta medida de seguridad en la mayoría de los navegadores (usted mismo y no los demás). También tenga en cuenta que estos ''hacks'' pueden volverse obsoletos con el tiempo.
Basado en la generalidad de esta pregunta, creo que necesitará configurar su propio proxy HTTPS en algún servidor en línea. Haga los siguientes pasos:
- Prepare su servidor proxy - instale IIS, Apache
- Obtenga un certificado SSL válido para evitar errores de seguridad (sin cargo de startssl.com, por ejemplo)
- Escribir un contenedor, que descargará contenido inseguro (cómo a continuación)
- Desde su sitio / aplicación, obtenga https://yourproxy.com/?page=http://insecurepage.com
Si simplemente descarga contenido del sitio remoto a través de file_get_contents o similar, aún puede tener enlaces inseguros al contenido. Tendrás que encontrarlos con expresiones regulares y también reemplazarlos. Las imágenes son difíciles de resolver, pero Ï encontré una solución alternativa aquí: http://foundationphp.com/tutorials/image_proxy.php
Podría intentar raspar lo que necesite con PHP u otro lenguaje del lado del servidor, luego coloque el iframe en el contenido raspado. Aquí hay un ejemplo con PHP:
scrapedcontent.php:
<?php
$homepage = file_get_contents(''http://www.example.com/'');
echo $homepage;
?>
index.html:
<iframe src="scrapedcontent.php"></iframe>
Sé que esta es una publicación anterior, pero otra solución sería usar cURL, por ejemplo:
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;
}
luego en su etiqueta iframe, algo como:
<iframe src="/redirect.php?url=http://www.example.com/"></iframe>
Este es solo un ejemplo MÍNIMO para ilustrar la idea: no desinfecta la URL ni impide que otra persona use redirect.php para sus propios fines. Considere estas cosas en el contexto de su propio sitio.
El aspecto positivo es que es más flexible. Por ejemplo, puede agregar alguna validación de los datos curl''d $ para asegurarse de que es realmente lo que desea antes de mostrarlo; por ejemplo, realice una prueba para asegurarse de que no sea un 404 y tenga su propio contenido alternativo listo si es.
Además, estoy un poco cansado de depender de los redireccionamientos de Javascript para cualquier cosa importante.
¡Aclamaciones!
Si se trata de unas pocas URL y pocas veces cambian para incrustarse en el iframe
, puede configurar un proxy SSL para esto en su propio servidor y configurarlo de manera que una URL https
en su servidor se correlacione con una URL http
en el proxy.
Por ejemplo, buscaría en ngrok y mitmproxy para esto, ya que son pequeños y simples de configurar (aunque por lo general con fines ligeramente diferentes).
Siempre recibirá advertencias de contenido bloqueado en la mayoría de los navegadores cuando intente mostrar contenido no seguro en una página https. Esto es complicado si quieres incrustar material de otros sitios que no están detrás de ssl. Puede desactivar las advertencias o eliminar el bloqueo en su propio navegador, pero para otros visitantes es un problema.
Una forma de hacerlo es cargar el lado del servidor de contenido y guardar las imágenes y otras cosas en su servidor y mostrarlas desde https.
También puede intentar usar un servicio como embed.ly y obtener el contenido a través de ellos. Tienen soporte para obtener el contenido detrás de https.
agregar <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
en la cabeza
referencia: http://thehackernews.com/2015/04/disable-mixed-content-warning.html
compatibilidad con el navegador: http://caniuse.com/#feat=upgradeinsecurerequests
Usar Google como el proxy SSL no funciona actualmente,
¿Por qué?
Si abrió una página de Google, encontrará que hay un campo de x-frame-options
en el encabezado.
El encabezado de respuesta HTTP de X-Frame-Options se puede usar para indicar si un navegador debe o no permitir que se presente una página en un
<frame>
,<iframe>
u<object>
. Los sitios pueden usar esto para evitar ataques de clickjacking, asegurándose de que su contenido no esté incrustado en otros sitios.
(Cita de MDN)
Una de la solución
Debajo está mi trabajo alrededor de este problema:
Suba el contenido a AWS S3 y creará un enlace https para el recurso.
Aviso: establezca el permiso para el archivo html para permitir que todos lo vean.
Después de eso, podemos usarlo como src
of iframe en los sitios web https.