Ładuję kod HTML do elementu iframe, ale gdy plik, do którego się odwołuje, używa protokołu http, a nie https, pojawia się następujący błąd:
[zablokowano] Strona pod adresem {current_pagename} zawiera niezabezpieczone treści z {referenced_filename}
Czy jest jakiś sposób, aby to wyłączyć lub jak to obejść?
Element iframe nie ma src
atrybutu, a zawartość jest ustawiana za pomocą:
frame.open();
frame.write(html);
frame.close();
Odpowiedzi:
Opierając się na ogólności tego pytania, myślę, że będziesz musiał skonfigurować własne proxy HTTPS na jakimś serwerze online. Wykonaj następujące kroki:
Jeśli po prostu pobierzesz zawartość witryny zdalnej za pośrednictwem pliku_get_contents lub podobnego, nadal możesz mieć niezabezpieczone linki do treści. Musisz je znaleźć za pomocą wyrażenia regularnego, a także zamienić. Obrazy są trudne do rozwiązania, ale Ï znalazłem obejście tutaj: http://foundationphp.com/tutorials/image_proxy.php
źródło
Najlepszym rozwiązaniem, które stworzyłem, jest użycie google jako proxy ssl ...
Przetestowane i działa w przeglądarce Firefox.
Inne metody:
Użyj strony trzeciej, takiej jak embed.ly (ale jest to naprawdę dobre tylko dla dobrze znanych interfejsów API http).
Utwórz własny skrypt przekierowania na stronie https, którą kontrolujesz (proste przekierowanie javascript na względnie połączonej stronie powinno załatwić sprawę. Coś w rodzaju: (możesz użyć dowolnej metody / języka)
https://example.com
To ma element iframe prowadzący do ...https://example.com/utilities/redirect.html
Który ma prosty skrypt przekierowania js, taki jak ...document.location.href ="http://thenonsslsite.com";
Alternatywnie możesz dodać kanał RSS lub napisać czytnik / parser, który będzie czytać witrynę http i wyświetlać ją w witrynie https.
Możesz / powinieneś również zalecić właścicielowi witryny http, aby utworzył połączenie ssl. Jeśli nie z innego powodu, jak tylko zwiększa seo .
O ile nie możesz nakłonić właściciela witryny http do utworzenia certyfikatu ssl, najbezpieczniejszym i najtrwalszym rozwiązaniem byłoby utworzenie kanału RSS przechwytującego potrzebne treści (przypuszczalnie w rzeczywistości nie `` robisz '' niczego w witrynie http - to znaczy powiedz, że nie logujesz się do żadnego systemu).
Prawdziwym problemem jest to, że posiadanie elementów http w witrynie https stanowi problem z bezpieczeństwem. Nie ma całkowicie koszernych sposobów na obejście tego zagrożenia bezpieczeństwa, więc powyższe to tylko aktualne obejścia.
Pamiętaj, że możesz wyłączyć ten środek bezpieczeństwa w większości przeglądarek (siebie, a nie innych). Należy również pamiętać, że te „hacki” mogą z czasem stać się przestarzałe.
źródło
Wiem, że to stary post, ale innym rozwiązaniem byłoby użycie cURL, na przykład:
redirect.php:
następnie w tagu iframe coś takiego:
To tylko MINIMALNY przykład ilustrujący pomysł - nie oczyszcza adresu URL ani nie uniemożliwia komuś innemu wykorzystania redirect.php do własnych celów. Rozważ te kwestie w kontekście swojej własnej witryny.
Zaletą jest jednak to, że jest bardziej elastyczny. Na przykład, możesz dodać weryfikację danych $ curl'd, aby upewnić się, że są one naprawdę tym, czego chcesz, zanim je wyświetlisz - na przykład przetestuj, aby upewnić się, że nie jest to 404, i przygotuj własną alternatywną zawartość, jeśli tak. jest.
Plus - jestem trochę zmęczony poleganiem na przekierowaniach JavaScript w przypadku czegokolwiek ważnego.
Twoje zdrowie!
źródło
example.com
która ma SSL. Osadzam element iframe,example.net
który nie ma SSL.example.com
Ma link jakhref="https://stackoverflow.com/path/file.html"
i podczas klikania to, to jest otwarcie jakhttps://example.com/path/file.html
zamiasthttp://example.net/path/file.html
dodać
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
w głowieźródło
Zawsze będziesz otrzymywać ostrzeżenia o zablokowanych treściach w większości przeglądarek podczas próby wyświetlenia niezabezpieczonych treści na stronie https. Jest to trudne, jeśli chcesz osadzić rzeczy z innych witryn, które nie są za protokołem SSL. Możesz wyłączyć ostrzeżenia lub usunąć blokowanie we własnej przeglądarce, ale dla innych odwiedzających to problem.
Jednym ze sposobów jest załadowanie strony serwera treści i zapisanie obrazów i innych rzeczy na serwerze i wyświetlenie ich z https.
Możesz także spróbować skorzystać z usługi takiej jak embed.ly i pobrać zawartość za ich pośrednictwem. Mają wsparcie dla pobierania treści za https.
źródło
Używanie Google jako serwera proxy SSL obecnie nie działa,
Czemu?
Jeśli otworzyłeś jakąkolwiek stronę z google,
x-frame-options
w nagłówku znajdziesz pole.(Cytat z MDN)
Jedno z rozwiązań
Poniżej znajduje się moje obejście tego problemu:
Prześlij zawartość do AWS S3 i utworzy łącze https dla zasobu.
Uwaga: ustaw uprawnienia do pliku html, aby wszyscy mogli go przeglądać.
Następnie możemy użyć go jako
src
elementu iframe w witrynach https.źródło
Możesz spróbować zeskrobać wszystko, czego potrzebujesz, za pomocą PHP lub innego języka po stronie serwera, a następnie umieścić ramkę iframe w pobranej zawartości. Oto przykład z PHP:
scrapedcontent.php:
index.html:
źródło
Wszystko, co musisz zrobić, to po prostu użyć Google jako serwera proxy.
https://www.google.ie/gwt/x?u=[YourHttpLink] .
U mnie to zadziałało.
Kredyty: - https://www.wikihow.com/Use-Google-As-a-Proxy
źródło
Użyj własnego zwrotnego serwera proxy HTTPS-to-HTTP.
Jeśli Twój przypadek użycia dotyczy kilku, rzadko zmieniających się adresów URL do osadzenia w
iframe
, możesz po prostu ustawić odwrotny serwer proxy na swoim własnym serwerze i skonfigurować go tak, aby jedenhttps
adres URL na serwerze był mapowany na jedenhttp
adres URL na serwerze proxy. Ponieważ odwrotne proxy działa w całości po stronie serwera, przeglądarka nie może wykryć, że rozmawia „tylko” z serwerem proxy prawdziwej witryny, a zatem nie będzie narzekać, ponieważ połączenie z serwerem proxy prawidłowo korzysta z protokołu SSL.Jeśli na przykład używasz Apache2 jako serwera internetowego, zapoznaj się z tymi instrukcjami, aby utworzyć odwrotne proxy.
źródło
mitmproxy
jest narzędziem do debugowania, a nie produkcyjnym systemem proxy.ngrok
to usługa tunelowania, głównie dla serwerów programistycznych, nie rozumiem, jak może się do tego przydać.