Eu carrego um pouco de HTML em um iframe, mas quando um arquivo referenciado está usando http, não https, recebo o seguinte erro:
[blocked] A página em {current_pagename} exibiu conteúdo inseguro de {referenced_filename}
Existe alguma maneira de desligar isso ou de qualquer maneira para contornar isso?
O iframe não possui o atributo src
e o conteúdo é definido usando:
frame.open();
frame.write(html);
frame.close();
Com base na generalidade desta questão, acho que você precisará configurar seu próprio proxy HTTPS em algum servidor on-line. Siga os seguintes passos:
Se você simplesmente baixar o conteúdo do site remoto via file_get_contents ou similar, ainda poderá ter links inseguros para o conteúdo. Você terá que encontrá-los com regex e também substituir. Imagens são difíceis de resolver, mas Ï encontrou solução aqui: http://foundationphp.com/tutorials/image_proxy.php
Nota: Embora esta solução possa ter funcionado em alguns navegadores quando foi escrita em 2014, não funciona mais. Navegar ou redirecionar para um URL HTTP em um
iframe
incorporado em uma página HTTPS não é permitido pelos navegadores modernos, mesmo que o quadro tenha começado com um URL HTTPS.
A melhor solução que criei é simplesmente usar o google como o proxy ssl ...
https://www.google.com/search?q=%http://yourhttpsite.com&btnI=Im+Feeling+Lucky
Testado e funciona no firefox.
Outros métodos:
Use um terceiro como o embed.ly (mas é realmente bom apenas para APIs conhecidas).
Crie seu próprio script de redirecionamento em uma página https que você controla (um simples redirecionamento de javascript em uma página vinculada relativa deve fazer o truque. Algo como: (você pode usar qualquer método/langauge)
https://example.com
Que tem um iframe vinculado a ...
https://example.com/utilities/redirect.html
Que tem um simples script de redirecionamento js como ...
document.location.href ="http://thenonsslsite.com";
Alternativamente, você poderia adicionar um feed RSS ou escrever algum leitor/analisador para ler o site http e exibi-lo em seu site https.
Você também pode/deve recomendar ao proprietário do site http que ele crie uma conexão ssl. Se por nenhum outro motivo que aumenta seo .
A menos que você consiga que o proprietário do site http crie um certificado ssl, a solução mais segura e permanente seria criar um feed RSS que capture o conteúdo que você precisa (presumivelmente, você não está realmente 'fazendo' nada no site http - que é diga não entrar em qualquer sistema).
A questão real é que ter elementos http dentro de um site https representa um problema de segurança. Não há maneiras completamente kosher em torno deste risco de segurança, de modo que o acima é apenas um trabalho atual.
Note que você pode desabilitar esta medida de segurança na maioria dos navegadores (você mesmo, não para outros). Observe também que esses "hacks" podem se tornar obsoletos com o tempo.
Eu sei que este é um post antigo, mas outra solução seria usar cURL, por exemplo:
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;
}
então na sua tag iframe, algo como:
<iframe src="/redirect.php?url=http://www.example.com/"></iframe>
Este é apenas um exemplo MÍNIMO para ilustrar a ideia - ela não desinfecta a URL, nem impede que outra pessoa use o redirect.php para seus próprios propósitos. Considere estas coisas no contexto do seu próprio site.
A vantagem, porém, é que é mais flexível. Por exemplo, você poderia adicionar alguma validação do curl $ data para ter certeza de que é realmente o que você quer antes de exibi-lo - por exemplo, testar para ter certeza de que não é um 404 e ter um conteúdo alternativo pronto se é.
Além disso, estou um pouco cansado de confiar em redirecionamentos de Javascript para qualquer coisa importante.
Felicidades!
adicione <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
na cabeça
referência: http://thehackernews.com/2015/04/disable-mixed-content-warning.html
compatibilidade do navegador: http://caniuse.com/#feat=upgradeinsecurerequests
Você sempre receberá avisos de conteúdo bloqueado na maioria dos navegadores ao tentar exibir conteúdo não seguro em uma página https. Isso é complicado se você quiser incorporar coisas de outros sites que não estão atrás do ssl. Você pode desativar os avisos ou remover o bloqueio em seu próprio navegador, mas para outros visitantes é um problema.
Uma maneira de fazer isso é carregar o lado do servidor de conteúdo e salvar as imagens e outras coisas em seu servidor e exibi-las a partir de https.
Você também pode tentar usar um serviço como o embed.ly e obter o conteúdo através deles. Eles têm suporte para obter o conteúdo por trás do https.
Usando o Google como o proxy SSL não está funcionando atualmente,
Se você abriu qualquer página do google, verá que há um campo x-frame-options
no cabeçalho.
O cabeçalho de resposta HTTP X-Frame-Options pode ser usado para indicar se um navegador deve ou não ter permissão para renderizar uma página em
<frame>
,<iframe>
ou<object>
. Os sites podem usar isso para evitar ataques de clickjacking, garantindo que o conteúdo deles não seja incorporado a outros sites.
(Citação do MDN)
Abaixo está o meu trabalho para este problema:
Carregue o conteúdo no AWS S3 e ele criará um link https para o recurso.
Aviso: defina a permissão para o arquivo html para permitir que todos o vejam.
Depois disso, podemos usá-lo como o src
do iframe nos sites https.
Você pode tentar copiar o que precisar com PHP ou outro idioma do lado do servidor e, em seguida, colocar o iframe no conteúdo copiado. Aqui está um exemplo com PHP:
scrapedcontent.php:
<?php
$homepage = file_get_contents('http://www.example.com/');
echo $homepage;
?>
index.html:
<iframe src="scrapedcontent.php"></iframe>
Se é sobre alguns e raramente mudando URLs para incorporar no iframe
, você poderia configurar um proxy SSL para isso em seu próprio servidor e configurá-lo para que uma URL https
em seu servidor seja mapeada para uma URL http
no servidor proxy.
Por exemplo, eu olharia para ngrok e mitmproxy para isso, uma vez que eles são pequenos e simples de configurar (embora usualmente significados para propósitos ligeiramente diferentes).