Cargo algo de HTML en un iframe, pero cuando un archivo al que se hace referencia usa http, no https, aparece el siguiente error:
[bloqueado] La página en {current_pagename} ejecutó contenido inseguro desde {referenced_filename}
¿Hay alguna forma de desactivar esto o alguna forma de evitarlo?
El iframe no tiene src
atributo y los contenidos se configuran usando:
frame.open();
frame.write(html);
frame.close();
Respuestas:
Según la generalidad de esta pregunta, creo que necesitará configurar su propio proxy HTTPS en algún servidor en línea. Haz los siguientes pasos:
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 aquí: http://foundationphp.com/tutorials/image_proxy.php
fuente
La mejor solución que creé es simplemente usar google como proxy SSL ...
Probado y funciona en firefox.
Otros metodos:
Use un tercero como embed.ly (pero realmente solo es bueno para las API http conocidas).
Cree su propio script de redireccionamiento en una página https que controle (un simple redireccionamiento de JavaScript en una página vinculada relativa debería ser el truco. Algo así como: (puede usar cualquier idioma / método)
https://example.com
Eso tiene un iframe vinculado 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 un lector / analizador para leer el sitio http y mostrarlo dentro de su sitio https.
También podría / debería recomendar al propietario del sitio http que cree una conexión SSL. Si por ninguna otra razón que aumenta seo .
A menos que pueda hacer que el propietario del sitio http cree un certificado ssl, la solución más segura y permanente sería crear una fuente RSS que grabe el contenido que necesita (presumiblemente no está 'haciendo' nada en el sitio http, eso es decir no iniciar sesión en ningún sistema).
El problema real es que tener elementos http dentro de un sitio https representa un problema de seguridad. No hay formas completamente kosher de este riesgo de seguridad, por lo que lo anterior son solo soluciones actuales.
Tenga en cuenta que puede deshabilitar esta medida de seguridad en la mayoría de los navegadores (usted mismo, no para otros). También tenga en cuenta que estos 'hacks' pueden volverse obsoletos con el tiempo.
fuente
Sé que esta es una publicación anterior, pero otra solución sería usar cURL, por ejemplo:
redirect.php:
luego en su etiqueta de iframe, algo como:
Este es solo un ejemplo MÍNIMO para ilustrar la idea: no desinfecta la URL ni evitará que otra persona use el redirect.php para sus propios fines. Considere estas cosas en el contexto de su propio sitio.
La ventaja, sin embargo, 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, pruebe para asegurarse de que no sea un 404 y tenga contenido alternativo propio si está es.
Además, estoy un poco cansado de confiar en los redireccionamientos de JavaScript para cualquier cosa importante.
¡Salud!
fuente
example.com
que tiene un SSL. Estoy incrustando un iframe con elexample.net
que no tiene SSL. Elexample.com
tiene un enlace comohref="https://stackoverflow.com/path/file.html"
y mientras hace clic en él, como es la aperturahttps://example.com/path/file.html
en lugar dehttp://example.net/path/file.html
agregar
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
en la cabezafuente
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 desea insertar cosas 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.
fuente
Usar Google como proxy SSL no funciona actualmente,
¿Por qué?
Si abrió alguna página de google, encontrará que hay un
x-frame-options
campo en el encabezado.(Cita de MDN)
Una de las soluciones
A continuación se muestra mi solución para este problema:
Cargue el contenido en 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
iframe en los sitios web https.fuente
Puede intentar eliminar todo lo que necesite con PHP u otro lenguaje del lado del servidor, luego colocar el iframe en el contenido eliminado. Aquí hay un ejemplo con PHP:
scrapedcontent.php:
index.html:
fuente
Todo lo que necesita hacer es usar Google como servidor proxy.
https://www.google.ie/gwt/x?u=[YourHttpLink] .
Funcionó para mi.
Créditos: - https://www.wikihow.com/Use-Google-As-a-Proxy
fuente
Use su propio proxy inverso HTTPS a HTTP.
Si su caso de uso se trata de unos pocos, que rara vez cambian las URL para incrustarlas
iframe
, simplemente puede configurar un proxy inverso para esto en su propio servidor y configurarlo para que unahttps
URL en su servidor se asigne a unahttp
URL en el servidor proxy. Dado que un proxy inverso está completamente en el lado del servidor, el navegador no puede descubrir que está "solo" hablando con un proxy del sitio web real y, por lo tanto, no se quejará, ya que la conexión al proxy usa SSL correctamente.Si, por ejemplo, usa Apache2 como su servidor web, consulte estas instrucciones para crear un proxy inverso.
fuente
mitmproxy
es una herramienta de depuración, no un sistema proxy de producción.ngrok
es un servicio de tunelización, principalmente para servidores de desarrollo, no entiendo cómo puede ser útil para esto.