Comment autoriser le contenu http dans un iframe sur un site https

Je charge du HTML dans un iframe mais quand un fichier référencé utilise http, pas https, j'obtiens l'erreur suivante:

[Bloqué] la page de {current_pagename} a exécuté du contenu non sécurisé à partir de {referenced_filename}

Y a-t-il un moyen de l'éteindre ou de le contourner?

L'iframe n'a pas d'attribut src et le contenu est défini en utilisant:

frame.open();
frame.write(html);
frame.close();
120
demandé sur davidivad 2013-08-20 09:04:17

8 réponses

Sur la base de la généralité de cette question, je pense que vous devrez configurer votre propre proxy HTTPS sur un serveur en ligne. Procédez comme suit:

  • Préparez votre serveur proxy-installez IIS, Apache
  • Obtenez un certificat SSL valide pour éviter les erreurs de sécurité startssl.com par exemple)
  • écrivez un wrapper, qui téléchargera du contenu non sécurisé (comment ci-dessous)
  • à Partir de votre site/application obtenir https://yourproxy.com/?page=http://insecurepage.com

Si vous téléchargez simplement le contenu du site distant via file_get_contents ou similiar, vous pouvez toujours avoir des liens non sécurisés vers le contenu. Vous devrez les trouver avec regex et aussi remplacer. Les Images sont difficiles à résoudre, mais Ï trouvé une solution de contournement ici: http://foundationphp.com/tutorials/image_proxy.php

20
répondu panpernicek 2014-08-14 03:09:15

Note: Bien que cette solution ait pu fonctionner dans certains navigateurs lorsqu'elle a été écrite en 2014, elle ne fonctionne plus. La navigation ou la redirection vers une URL HTTP dans un iframe intégré dans une page HTTPS n'est pas autorisée par les navigateurs modernes, même si le cadre a commencé avec une URL HTTPS.

La meilleure solution que j'ai créée est simplement d'utiliser google comme proxy ssl...

https://www.google.com/search?q=%http://yourhttpsite.com&btnI=Im+Feeling+Lucky

Testé et fonctionne dans firefox.

Autres Méthodes:

  • Utilisez un troisième partie tels que embed.ly (mais c'est vraiment seulement bon pour les API http bien connues).

  • Créez votre propre script de redirection sur une page https que vous contrôlez (une simple redirection javascript sur une page liée relative devrait faire l'affaire. Quelque chose comme: (vous pouvez utiliser n'importe quelle langauge/méthode)

    https://example.com Cela a un lien iframe vers...

    https://example.com/utilities/redirect.html qui a un simple script de redirection js comme...

    document.location.href ="http://thenonsslsite.com";

  • Vous pouvez également ajouter un flux RSS ou en écrire lecteur / analyseur pour lire le site http et l'afficher dans votre site https.

  • Vous pouvez / devriez également recommander au propriétaire du Site http de créer une connexion ssl. Si pour aucune autre raison que , il augmente de référencement.

Sauf si vous pouvez obtenir le propriétaire du Site http pour créer un certificat ssl, la solution la plus sûre et permanente serait de créer un flux RSS saisissant le contenu dont vous avez besoin (probablement que vous ne faites rien sur le http site-c'est-à-dire ne pas se connecter à un système).

Le vrai problème est que le fait d'avoir des éléments http dans un site https représente un problème de sécurité. Il n'y a pas de moyens complètement casher autour de ce risque de sécurité, donc ce qui précède ne sont que des solutions de contournement actuelles.

Notez que vous pouvez désactiver cette mesure de sécurité dans la plupart des navigateurs (vous-même, pas pour les autres). Notez également que ces "hacks" peuvent devenir obsolètes au fil du temps.

118
répondu Matthew Peters 2018-01-26 08:05:03

Je sais que c'est un vieux post, mais une autre solution serait d'utiliser cURL, par exemple:

Redirection.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;
}

Ensuite, dans votre balise iframe, quelque chose comme:

<iframe src="/redirect.php?url=http://www.example.com/"></iframe>

Ceci est juste un exemple MINIMAL pour illustrer l'idée - il ne désinfecte pas L'URL, ni n'empêcherait quelqu'un d'autre d'utiliser la redirection.php à leurs propres fins. Considérez ces choses dans le contexte de votre propre site.

L'avantage, cependant, est qu'il est plus souple. Par exemple, vous pouvez ajouter une certaine validation des données curl'D $pour s'assurer que c'est vraiment ce que vous voulez avant de l'afficher-par exemple, testez pour vous assurer que ce n'est pas un 404, et ayez un autre contenu prêt si c'est le cas.

Plus -- je suis un peu fatigué de compter sur les redirections Javascript pour tout ce qui est important.

Cheers!

22
répondu David R. 2015-05-19 06:10:51

Vous obtiendrez toujours des avertissements de contenu bloqué dans la plupart des navigateurs lorsque vous essayez d'afficher du contenu non sécurisé sur une page https. C'est difficile si vous voulez intégrer des choses à partir d'autres sites qui ne sont pas derrière ssl. Vous pouvez désactiver les avertissements ou supprimer le blocage dans votre propre navigateur, mais pour les autres visiteurs, c'est un problème.

Une façon de le faire est de charger le côté serveur de contenu et d'enregistrer les images et autres choses sur votre serveur et de les afficher à partir de https.

Vous pouvez également essayer utiliser un service comme embed.ly et obtenir le contenu à travers eux. Ils ont un support pour obtenir le contenu derrière https.

6
répondu Addeladde 2017-05-11 17:14:53

Ajouter <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> dans la tête

Référence: http://thehackernews.com/2015/04/disable-mixed-content-warning.html

Compatibilité de votre Navigateur: http://caniuse.com/#feat=upgradeinsecurerequests

4
répondu user2523022 2017-01-30 18:57:07

L'utilisation de Google comme proxy SSL ne fonctionne pas actuellement,

Pourquoi?

Si vous avez ouvert une page de google, vous trouverez un champ x-frame-options dans l'en-tête. En-tête de réponse Google

L'en - tête de réponse HTTP X-Frame-Options peut être utilisé pour indiquer si un navigateur doit être autorisé à rendre une page dans un <frame>, <iframe> ou <object>. Les Sites peuvent l'utiliser pour éviter les attaques de clickjacking, en assurant que leur contenu n'est pas intégré dans d'autres site.

(citation de MDN)

Une des solutions

Ci-Dessous est mon travail autour de ce problème:

Téléchargez le contenu dans AWS S3, et cela créera un lien https pour la ressource.
Avis: définissez l'autorisation sur le fichier html pour permettre à tout le monde de le voir.

Après cela, nous pouvons l'utiliser comme src de iframe dans les sites Web https. AWS

3
répondu David Guan 2018-01-02 13:25:49

Vous pouvez essayer de gratter tout ce dont vous avez besoin avec PHP ou un autre langage côté serveur, puis mettre l'iframe au contenu gratté. Voici un exemple avec PHP:

Scrapedcontent.php:

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

Index.html:

<iframe src="scrapedcontent.php"></iframe>
1
répondu Grant 2014-03-24 18:42:33

S'il s'agit de quelques URL à intégrer dans le iframe, Vous pouvez configurer un proxy SSL pour cela sur votre propre serveur et le configurer de sorte qu'une URL https sur votre serveur correspond à une URL http sur le serveur proxy.

Par exemple, je voudrais regarder dans ngrok et mitmproxy pour cela, car ils sont petits et simples à configurer (bien que généralement destinés à des fins légèrement différentes).

1
répondu tanius 2018-08-13 20:09:51