https 사이트의 iframe 내에서 http 콘텐츠를 허용하는 방법


145

HTML을 iframe에로드하지만 참조 된 파일이 https가 아닌 http를 사용하면 다음 오류가 발생합니다.

[blocked] {current_pagename}의 페이지가 {referenced_filename}에서 안전하지 않은 콘텐츠를 실행했습니다.

이 기능을 끄거나 해결할 수있는 방법이 있습니까?

iframe에는 src속성 이 없으며 내용은 다음을 사용하여 설정됩니다.

frame.open();
frame.write(html);
frame.close();


편집했다. 내용이 iframe에 기록 될 때 src가 설정되지 않습니다
georgephillips

1
모든 답변에 감사드립니다. 짧은 이야기는 내용을 대리합니다.
georgephillips

@georgephillips 컨텐츠 프록시 용 코드를 공유 하시겠습니까?
Gintas_

답변:


28

이 질문의 일반성을 바탕으로 온라인에서 일부 서버에 자체 HTTPS 프록시를 설정해야한다고 생각합니다. 다음 단계를 수행하십시오.

단순히 file_get_contents 또는 유사 항목을 통해 원격 사이트 컨텐츠를 다운로드하는 경우에도 컨텐츠에 대한 안전하지 않은 링크가있을 수 있습니다. 정규식으로 찾아서 바꿔야합니다. 이미지는 해결하기 어렵지만 Ï 여기서 해결 방법을 찾았습니다. http://foundationphp.com/tutorials/image_proxy.php


1
iframe 뒤의 많은 페이지가 iframe에 포함되기를 원하지 않으므로 X-Frame-Options Header를 SAMEORIGIN으로 설정하기 때문에 이것은 작동하지 않습니다. 프록시를 사용하여이를 우회해도 페이지는 /insecurepage.css와 같은 것을로드하려고 시도하고 브라우저는 yourdomain / insecurepage.css
해독제

135

참고 : 이 솔루션은 2014 년에 작성된 일부 브라우저에서 작동했지만 더 이상 작동하지 않습니다. iframe프레임이 HTTPS URL로 시작하더라도 최신 브라우저에서는 HTTPS 페이지에 포함 된 HTTP URL을 탐색하거나 리디렉션 할 수 없습니다.

내가 만든 최고의 솔루션은 단순히 Google을 SSL 프록시로 사용하는 것입니다 ...

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

파이어 폭스에서 테스트되고 작동합니다.

다른 방법들 :

  • embed.ly와 같은 타사를 사용하십시오 (그러나 잘 알려진 http API에만 유용합니다).

  • 제어하는 https 페이지에서 자신의 리디렉션 스크립트를 만듭니다 (상대 링크 된 페이지의 간단한 자바 스크립트 리디렉션은 트릭을 수행해야합니다.

    https://example.com 그것은 iframe에 연결되어 있습니다 ...

    https://example.com/utilities/redirect.html 다음과 같은 간단한 js 리디렉션 스크립트가 있습니다 ...

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

  • 또는 RSS 피드를 추가하거나 일부 리더 / 파서를 작성하여 http 사이트를 읽고 https 사이트 내에 표시 할 수 있습니다.

  • http 사이트 소유자에게 SSL 연결을 생성하도록 권장 할 수도 있습니다. 다른 이유가 없으면 seo이 증가 합니다.

http 사이트 소유자가 SSL 인증서를 작성하도록 할 수 없다면 가장 안전하고 영구적 인 솔루션은 필요한 컨텐츠를 가져 오는 RSS 피드를 작성하는 것입니다. 시스템에 로그인하지 말 것).

실제 문제는 https 사이트에 http 요소가 있으면 보안 문제를 나타냅니다. 이 보안 위험과 관련하여 완전히 정결 한 방법은 없으므로 위의 방법은 현재의 해결 방법입니다.

대부분의 브라우저 (다른 사용자가 아닌 자신의 브라우저)에서이 보안 조치를 비활성화 할 수 있습니다. 또한 이러한 '해킹'은 시간이 지남에 따라 더 이상 사용되지 않을 수 있습니다.


10
좋은 답변, 감사합니다. 크롬에서 알리기 위해 JS 리디렉션 방법은 작동하지 않습니다 (정상적으로로드하려고 할 때와 마찬가지로).
georgephillips

9
리디렉션 트릭은 Firefox에서만 작동하는 것 같습니다. Chrome은 여전히 ​​안전하지 않은 콘텐츠로드를 거부합니다. 다른 알려진 해결 방법이 있습니까?
Andreas Gohr

47
"제어하는 https 페이지에서 자신 만의 리디렉션 스크립트 만들기"방법이 더 이상 JS를 사용하는 경우에도 현재 버전의 Chrom (e | ium) 및 Firefox에서 작동하지 않는다는 것을 알리고 싶었습니다.
kako-nawao

17
이 답변은 현재까지 유효하지 않습니다. 다른 솔루션
samdd

22
답변에는 '더 이상 사용되지 않음'으로 표시 될 수있는 옵션이 있어야합니다. 모든 주석을 읽지 않으면 혼란이 생깁니다.
Nitin

28

나는 이것이 오래된 게시물이라는 것을 알고 있지만 다른 해결책은 예를 들어 cURL을 사용하는 것입니다.

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

그런 다음 iframe 태그에서 다음과 같습니다.

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

이것은 아이디어를 설명하기위한 최소한의 예일뿐입니다. URL을 위생 처리하지 않으며 다른 사람이 자신의 목적으로 redirect.php를 사용하지 못하게하지도 않습니다. 자신의 사이트와 관련하여 이러한 사항을 고려하십시오.

그러나 장점은 더 유연하다는 것입니다. 예를 들어 curl'd $ data에 대한 유효성 검사를 추가하여 표시하기 전에 실제로 원하는 것이 맞는지 확인할 수 있습니다. 입니다.

게다가-중요한 것에 대해서는 Javascript 리디렉션에 의존하는 것이 약간 지쳤습니다.

건배!


4
이것은 작동하지만 사이트 내부의 링크가 유효하지 않습니다. 예를 들어 example.comSSL 이라는 도메인 이 있습니다. example.netSSL이없는 iframe을 포함하고 있습니다. 이 example.com링크는 링크 href="https://stackoverflow.com/path/file.html"를 클릭하는 동안 https://example.com/path/file.html대신 링크 로 http://example.net/path/file.html
열립니다

1
이 작업을 원하면 링크가 상대적 일 수 없습니다. 즉, href 내에 전체 URL을 지정하십시오. 이것이 동적이면 서버 측뿐만 아니라 Javascript로 URL의 각 세그먼트를 가져 오는 라이브러리가 있습니다.
Anthony Mason

iframe 아래 대상 사이트의 CSS가 손상되었습니다. 확인하십시오
Raju yourPepe

14

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">머리에 추가

참조 : http://thehackernews.com/2015/04/disable-mixed-content-warning.html

브라우저 호환성 : http://caniuse.com/#feat=upgradeinsecurerequests


23
이 솔루션을 사용하면 https 사이트에서 http 컨텐츠를 제공 할 수 없습니다. 이 모든 것은 http 요청을 https 요청으로 강제하는 것입니다. https에 리소스가 존재하지 않으면 대신 404 오류가 발생합니다.
Felix

이것은 실제로 내 요구에 적어도 작동합니다 .. firefox로 테스트하고 확인했습니다. 내 문제는 내 웹 사이트가 HTTPS를 사용하는 동안 소스 URL이 HTTPS를 준수하지 않는다는 것입니다.
Fernan Vecina

크롬 버전 76.0.3809.132 (공식 빌드)에 매력처럼 작동
모하메드 Azharuddin

8

https 페이지에 안전하지 않은 콘텐츠를 표시하려고 할 때 대부분의 브라우저에서 차단 된 콘텐츠에 대한 경고가 항상 표시됩니다. SSL 뒤에없는 다른 사이트의 물건을 포함 시키려면 까다 롭습니다. 브라우저에서 경고를 끄거나 차단을 제거 할 수 있지만 다른 방문자에게는 문제가 있습니다.

이를 수행하는 한 가지 방법은 컨텐츠 서버 측을로드하고 이미지 및 기타 항목을 서버에 저장하고 https에서 표시하는 것입니다.

embed.ly와 같은 서비스를 사용하여 컨텐츠를 얻을 수도 있습니다. 그들은 https 뒤에 컨텐츠를 얻는 것을 지원합니다.


콘텐츠를 긁어 사이트에 표시하면 사이트 간 스크립팅의 위험이 항상 있습니다. 따라서 신의 해결책은 별도의 URL에서 콘텐츠를 긁어 내고 https를 사용하여 해당 URL의 iframe에 데이터를 표시하는 것입니다. 이러한 방식으로 메인 사이트 및 세션 하이재킹에서 사이트 간 스크립팅을 방지 할 수 있습니다.
Addeladde

6

현재 SSL 프록시로 Google을 사용하고 있지 않습니다.

왜?

Google에서 페이지를 열면 x-frame-options헤더에 필드가 있습니다. Google 응답 헤더

X-Frame-Options HTTP 응답 헤더를 사용하여 브라우저 <frame>에서 <iframe>또는 페이지를 렌더링 할 수 있는지 여부를 나타낼 수 있습니다 <object>. 사이트는이를 사용하여 컨텐츠가 다른 사이트에 포함되지 않도록하여 클릭 재킹 공격을 방지 할 수 있습니다.

(MDN에서 인용)

해결책 중 하나

아래는이 문제에 대한 해결 방법입니다.

콘텐츠를 AWS S3에 업로드하면 리소스에 대한 https 링크가 생성됩니다.
알림 : 모든 사람이 볼 수 있도록 html 파일에 대한 권한을 설정하십시오.

그런 src다음 https 웹 사이트에서 iframe 으로 사용할 수 있습니다 . AWS


2

PHP 또는 다른 서버 측 언어로 필요한 것을 스크랩 한 다음 iframe을 스크랩 된 내용에 넣을 수 있습니다. 다음은 PHP를 사용한 예입니다.

scrapedcontent.php :

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

index.html :

<iframe src="scrapedcontent.php"></iframe>

3
JS 및 CSS 파일, 하이퍼 링크 및 AJAX 요청을 포함하여 이미지를 어떻게 처리합니까?
dotancohen

@ dotancohen 당신 말이 맞습니다. 완벽한 해결책은 아니지만이 상황에 가장 적합하다고 생각합니다. 논의한 문제에 부딪치지 않는 사이트도 있습니다.
Grant

1
이것은 효과가 있지만 서버의 컨텐츠를 긁어
모아서


1

고유 한 HTTPS-to-HTTP 리버스 프록시를 사용하십시오.

유스 케이스가에 거의 포함되지 않는 URL을 거의 변경하지 않는 경우 iframe, 자신의 서버에서이를 위해 리버스 프록시를 설정하고 https서버의 한 httpURL이 프록시 서버의 한 URL에 맵핑 되도록 구성 할 수 있습니다. 리버스 프록시는 완전히 서버 측이므로 브라우저는 실제 웹 사이트의 프록시와 "전용"대화 중임을 감지 할 수 없으므로 프록시에 대한 연결이 SSL을 올바르게 사용하므로 불평하지 않습니다.

예를 들어 Apache2를 웹 서버 로 사용하는 경우 다음 지침 을 참조 하여 리버스 프록시를 작성 하십시오 .


1
mitmproxy프로덕션 프록시 시스템이 아닌 디버깅 도구입니다. ngrok터널링 서비스입니다. 주로 개발 서버에 유용하며, 이것이 어떻게 유용한 지 이해하지 못합니다.
kolen

@kolen 그것은 도구에 관한 것이 아니라 다른 답변에 언급되지 않은 리버스 프록시를 사용하는 아이디어에 관한 것입니다. 리버스 프록시를 수행하는 훨씬 일반적인 방법 인 지금 Apache로 변경하십시오.
tanius
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.