Programming

"X-Frame-Options에 의해 금지 된 디스플레이"극복

procodes 2020. 2. 20. 23:39
반응형

"X-Frame-Options에 의해 금지 된 디스플레이"극복


나는 다른 몇 페이지를 프레임 화하고보기 쉽게 단일 브라우저 창으로 통합하는 것을 목적으로하는 작은 웹 페이지를 작성 중입니다. 프레임을 만들려고하는 일부 페이지에서 프레임이 금지되고 "X-Frame-Options에서 표시가 금지되어 문서 표시가 거부되었습니다." Chrome에서 오류가 발생했습니다. 본인은 이것이 보안상의 제한 (이유 상 이유로)이며 변경할 권한이 없음을 이해합니다.

X-Frame-Options 헤더에 의해 넘어지지 않는 단일 창 내에 페이지를 표시하는 다른 프레이밍 또는 비 프레이밍 방법이 있습니까?


비슷한 문제가 있는데, iframe에서 자체 사이트의 컨텐츠를 iframe에 표시하려고하고 ( Colorbox 와 함께 라이트 박스 스타일 대화 상자로 ), 서버 전체에 "X-Frame-Options SAMEORIGIN"헤더 가있는 비슷한 문제 가있었습니다. 소스 서버가 테스트 서버에로드되지 않도록합니다.

이것은 어디에도 문서화되지 않은 것처럼 보이지만 iframe하려고하는 페이지를 편집 할 수 있다면 (예를 들어, 자신의 페이지 인 경우) 모든 비활성화에서 문자열로 다른 X-Frame-Options 헤더를 보내기 만하면됩니다. SAMEORIGIN 또는 DENY 명령

예. PHP의 경우

<?php
    header('X-Frame-Options: GOFORIT'); 
?>

페이지 상단에 브라우저가 두 가지를 결합하여

X-Frame-Options SAMEORIGIN, GOFORIT

... 페이지를 iframe에로드 할 수 있습니다. 이것은 초기 SAMEORIGIN 명령이 서버 수준에서 설정된 경우 작동하는 것으로 보이며 페이지 단위로 재정의하려고합니다.

모두 제일 좋다!


YouTube 동영상에 대해이 오류가 발생하면 전체 URL을 사용하는 대신 공유 옵션에서 퍼가기 URL을 사용하십시오. 그것은 보일 것입니다http://www.youtube.com/embed/eCfDxZxTBW4

또한 대체 할 수 watch?v=와 함께 embed/그렇게 http://www.youtube.com/watch?v=eCfDxZxTBW4된다http://www.youtube.com/embed/eCfDxZxTBW4


에 Google지도를 삽입하려는 중에이 오류가 발생 하면 소스 링크 iframe에 추가 &output=embed해야합니다.


UPDATE 2019 : 당신이 할 수있는 우회 X-Frame-Options에서 <iframe>사용 단지 클라이언트 측 자바 스크립트와 내 X-프레임 - 바이 패스 웹 구성 요소. 데모는 다음과 같습니다. Hacker News in aX-Frame-Bypass . (Chrome 및 Firefox에서 테스트되었습니다.)


추가

  target='_top'

페이스 북 탭의 링크로 이동하면 문제가 해결되었습니다 ...


Chrome 용 플러그인이 있는데,이 헤더 항목을 삭제합니다 (개인용).

https://chrome.google.com/webstore/detail/ignore-x-frame-headers/gleekbfjekiniecknbkamfmkohkpodhe/reviews


당신이 포함 메오 내용하려고이 오류가 발생하는 경우, iframe이의 SRC을 변경

:에서 https://vimeo.com/63534746
에 : http://player.vimeo.com/video/63534746


내가 iframe에 무 2를 삽입 시도 같은 문제가 있었다, 솔루션입니다 Site administration ► Security ► HTTP security체크Allow frame embedding


이것은 솔루션 녀석입니다!

FB.Event.subscribe('edge.create', function(response) {
    window.top.location.href = 'url';
});

페이스 북 앱에서 효과가 있었던 유일한 것!


외부 웹 사이트를 iFrame에로드하기위한 솔루션 x 터프 옵션도 외부 웹 사이트에서 거부되도록 설정되어 있습니다.

다른 웹 사이트를 iFrame에로드하고 Display forbidden by X-Frame-Options”오류가 발생하면 실제로 서버 측 프록시 스크립트를 작성하여이를 극복 할 수 있습니다.

srciFrame 속성은 다음과 같은 URL을 가질 수 있습니다./proxy.php?url=https://www.example.com/page&key=somekey

그런 다음 proxy.php는 다음과 같습니다.

if (isValidRequest()) {
   echo file_get_contents($_GET['url']);
}

function isValidRequest() {
    return $_SERVER['REQUEST_METHOD'] === 'GET' && isset($_GET['key']) && 
    $_GET['key'] === 'somekey';
}

이것은 일반적인 브라우저 페이지 방문과 마찬가지로 GET 요청이므로 블록을 전달합니다.

알아두기 :이 스크립트에서 보안을 향상시킬 수 있습니다. 해커가 프록시 스크립트를 통해 웹 페이지에서로드를 시작할 수 있기 때문입니다.


나는 거의 모든 제안을 시도했다. 그러나 실제로 문제를 해결 한 유일한 것은 다음과 같습니다.

  1. .htaccessPHP 파일이있는 동일한 폴더에를 만듭니다 .

  2. 이 줄을 htaccess에 추가하십시오.

    Header always unset X-Frame-Options

다른 도메인에서 iframe으로 PHP를 임베드하면 나중에 작동합니다.

또한 PHP 파일의 시작 부분에 추가 할 수 있습니다.

header('X-Frame-Options: ALLOW');

그러나 내 경우에는 필요하지 않았습니다.


Content-Security-Policy 헤더를 대신 사용하면 X-Frame-Options Allow-From https : // ... 가 감가 상각되고 대체 (및 무시) 된 것으로 보입니다 .

자세한 내용은 https://content-security-policy.com/을 참조 하십시오.


mediawiki와 동일한 문제가 있었는데, 이는 보안상의 이유로 서버가 페이지를 iframe에 삽입하는 것을 거부했기 때문입니다.

나는 그것을 작성 해결

$wgEditPageFrameOptions = "SAMEORIGIN"; 

미디어 위키 PHP 설정 파일로.

도움이 되길 바랍니다.


FWIW :

iFrame이 "브레이커"코드가 나타 났을 때 우리를 죽여야 할 상황 이있었습니다. 그래서 PHP function get_headers($url);로 원격 URL을 확인하기 전에 원격 URL을 확인했습니다 iFrame. 더 나은 성능을 위해 결과를 파일에 캐시하여 매번 HTTP 연결을 만들지 않았습니다.


Tomcat 8.0.30을 사용하고 있었지만 제안 사항이 저에게 효과적이지 않았습니다. 를 업데이트하고 X-Frame-Options로 설정하려고했지만 ALLOW여기에 iframe 삽입을 허용하도록 구성한 방법이 있습니다.

  • Tomcat conf 디렉토리로 이동하여 web.xml 파일을 편집하십시오.
  • 아래 필터를 추가하십시오.
<filter>
            <filter-name>httpHeaderSecurity</filter-name>
            <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
                   <init-param>
                           <param-name>hstsEnabled</param-name>
                           <param-value>true</param-value>
                   </init-param>
                   <init-param>
                           <param-name>antiClickJackingEnabled</param-name>
                           <param-value>true</param-value>
                   </init-param>
                   <init-param>
                           <param-name>antiClickJackingOption</param-name>
                           <param-value>ALLOW-FROM</param-value>
                   </init-param>
            <async-supported>true</async-supported>
       </filter>

       <filter-mapping>
                   <filter-name>httpHeaderSecurity</filter-name>
                   <url-pattern>/*</url-pattern>
                   <dispatcher>REQUEST</dispatcher>
       </filter-mapping> 
  • Tomcat 서비스를 다시 시작하십시오.
  • iFrame을 사용하여 리소스에 액세스하십시오.

답이 많은 유일한 질문입니다. 마감일에 밤 10시 30 분에 작동하도록하기 위해 스크램블 할 때 갖고 싶었던 가이드에 오신 것을 환영합니다 ... FB는 캔버스 응용 프로그램으로 이상한 일을하고 잘 경고했습니다. 여전히 여기 있고 Facebook Canvas 뒤에 나타날 Rails 앱이 있다면 다음이 필요합니다.

젬 파일 :

gem "rack-facebook-signed-request", :git => 'git://github.com/cmer/rack-facebook-signed-request.git'

config / facebook.yml

facebook:
  key: "123123123123"
  secret: "123123123123123123secret12312"

config / application.rb

config.middleware.use Rack::Facebook::SignedRequest, app_id: "123123123123", secret: "123123123123123123secret12312", inject_facebook: false

config / initializers / omniauth.rb

OmniAuth.config.logger = Rails.logger
SERVICES = YAML.load(File.open("#{::Rails.root}/config/oauth.yml").read)
Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, SERVICES['facebook']['key'], SERVICES['facebook']['secret'], iframe:   true
end

application_controller.rb

before_filter :add_xframe
def add_xframe
  headers['X-Frame-Options'] = 'GOFORIT'
end

Facebook의 캔버스 설정에서 호출하려면 컨트롤러가 필요 /canvas/합니다 SiteController.이 앱을 사용 하여 경로를 기본 으로 설정했습니다.


class SiteController < ApplicationController
  def index
    @user = User.new
  end
  def canvas
    redirect_to '/auth/failure' if request.params['error'] == 'access_denied'
    url = params['code'] ? "/auth/facebook?signed_request=#{params['signed_request']}&state=canvas" : "/login"
    redirect_to url
  end
  def login
  end
end

login.html.erb


<% content_for :javascript do %>
  var oauth_url = 'https://www.facebook.com/dialog/oauth/';
  oauth_url += '?client_id=471466299609256';
  oauth_url += '&redirect_uri=' + encodeURIComponent('https://apps.facebook.com/wellbeingtracker/');
  oauth_url += '&scope=email,status_update,publish_stream';
console.log(oauth_url);
  top.location.href = oauth_url;
<% end %>

출처

  • 내가 생각하는 구성은 omniauth의 예에서 나온 것입니다.
  • gem 파일 (key !!!)은 다음과 같습니다 .
  • 이 스택 질문에는 전체 Xframe 각도가 있으므로이 헤더를 앱 컨트롤러에 넣지 않으면 빈 공간이 생깁니다.
  • 그리고 내 남자 @rafmagana는이 heroku 안내서를 썼습니다.이 안내서 는이 대답과 함께 걷는 거인의 어깨로 레일을 채택 할 수 있습니다.

target = '_ parent'

Kevin Vella의 아이디어를 사용하여 PayPal의 버튼 생성기로 만든 요소를 ​​형성하기 위해 해당 속성을 추가하려고했습니다. Paypal이 새 브라우저 창 / 탭에서 열리지 않도록 나를 위해 일했습니다.


그것이 얼마나 관련성이 있는지 잘 모르겠지만, 이에 대한 해결 방법을 마련했습니다. 내 사이트에서 URL을로드하는 iframe이 포함 된 모달 창에 링크를 표시하려고했습니다.

내가 한 것은 링크의 클릭 이벤트를이 JavaScript 함수에 연결하는 것입니다. 이 모든 작업은 모달 창에 URL을로드할지 리디렉션 할지를 결정하기 전에 URL 헤더에서 X-FRAME-Options를 확인하는 PHP 파일을 요청합니다.

기능은 다음과 같습니다.

  function opentheater(link, title){
        $.get( "url_origin_helper.php?url="+encodeURIComponent(link), function( data ) {
  if(data == "ya"){
      $(".modal-title").html("<h3 style='color:480060;'>"+title+"&nbsp;&nbsp;&nbsp;<small>"+link+"</small></h3>");
        $("#linkcontent").attr("src", link);
        $("#myModal").modal("show");
  }
  else{
      window.location.href = link;
      //alert(data);
  }
});


        }

이를 확인하는 PHP 파일 코드는 다음과 같습니다.

<?php
$url = rawurldecode($_REQUEST['url']);
$header = get_headers($url, 1);
if(array_key_exists("X-Frame-Options", $header)){
    echo "nein";
}
else{
    echo "ya";
}


?>

도움이 되었기를 바랍니다.


워드 프레스 웹 사이트를 실행할 때이 문제가 발생했습니다. 나는 모든 종류의 문제를 해결하기 위해 노력했지만 어떻게 궁극적으로 문제는 마스킹과 함께 DNS 전달을 사용하고 외부 사이트에 대한 링크가 올바르게 처리되지 않았기 때문에 발생했는지 확실하지 않았습니다. 즉, 내 사이트는 http : //123.456.789/index.html 에서 호스팅 되었지만 http://somewebSite.com/index.html 에서 실행되도록 마스크되었습니다 . 브라우저에서 http : //123.456.789/index.html입력 하면 동일한 링크를 클릭하면 JS 콘솔에서 X-frame-origins 문제가 발생하지 않지만 http://somewebSite.com/index.html을 실행하면했다. 제대로 마스크하려면 호스트의 DNS 이름 서버를 도메인 서비스에 추가해야합니다. 예를 들어 godaddy.com의 경우 이름 서버 (예 : ns1.digitalocean.com, ns2.digitalocean.com, ns3.digitalocean.com)가 있어야합니다. digitalocean.com을 호스팅 서비스로 사용합니다.


Apache서버 설정 ( *.conf파일) 또는 .htaccess파일 자체를이 오류의 원인으로 언급 한 사람은 아무도 없습니다 . .htaccess또는 Apache구성 파일을 검색 하여 다음으로 설정되어 있지 않은지 확인하십시오 DENY.

Header always set X-Frame-Options DENY

로 변경하면 SAMEORIGIN예상대로 작동합니다.

Header always set X-Frame-Options SAMEORIGIN


iframe에서 원하는 소스의 헤더를 제어하지 않으면 유일한 대답은 프록시하는 것입니다. 서버가 클라이언트 역할을하고 소스를 받고 문제가있는 헤더를 제거하고 필요한 경우 CORS를 추가 한 다음 자신의 서버를 핑하십시오.

그러한 프록시를 작성하는 방법을 설명하는 다른 대답이 있습니다. 어렵지는 않지만 누군가 전에이 작업을 수행해야한다고 확신했습니다. 어떤 이유로 든 찾기가 어려웠습니다.

마침내 몇 가지 출처를 찾았습니다.

https://github.com/Rob--W/cors-anywhere/#documentation

^ 선호합니다. 드문 사용법이 필요하다면 그의 heroku 앱을 사용할 수 있다고 생각합니다. 그렇지 않으면 자신의 서버에서 직접 실행하는 코드입니다. 한계가 무엇인지 확인하십시오.

whateverorigin.org

^ 두번째 선택, 그러나 아주 오래된. 아마도 파이썬에서 가장 새로운 선택 : https://github.com/Eiledon/alloworigin

그런 다음 세 번째 선택이 있습니다.

http://anyorigin.com/

약간의 무료 사용을 허용하는 것처럼 보이지만 지불하지 않고 지정되지 않은 금액을 사용하지 않으면 공공 부끄러운 목록에 놓이게됩니다.이 금액은 수수료를 지불해야만 제거 할 수 있습니다 ...


언급되지 않았지만 어떤 경우에는 도움이 될 수 있습니다.

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
    if (xhr.readyState !== 4) return;
    if (xhr.status === 200) {
        var doc = iframe.contentWindow.document;
        doc.open();
        doc.write(xhr.responseText);
        doc.close();
    }
}
xhr.open('GET', url, true);
xhr.send(null);

header()기능 대신 아래에 주어진이 줄을 사용하십시오 .

echo "<script>window.top.location = 'https://apps.facebook.com/yourappnamespace/';</script>";

이 문제가 발생하여 httd.conf를 편집하여 해결했습니다.

<IfModule headers_module>
    <IfVersion >= 2.4.7 >
        Header always setifempty X-Frame-Options GOFORIT
    </IfVersion>
    <IfVersion < 2.4.7 >
        Header always merge X-Frame-Options GOFORIT
    </IfVersion>
</IfModule>

SAMEORIGIN을 GOFORIT로 변경하고 서버를 다시 시작했습니다.


전체 디렉토리에서 X-Frame-Options를 제거하려면 .htaccess를 편집하십시오.

그리고 라인을 추가하십시오 : 헤더는 항상 X-Frame-Options를 설정 해제합니다.

[내 보낸 내용 : "X-Frame-Options에 의해 금지 된 디스플레이"극복


이 일을 시도해보십시오, 나는 누군가가 주제에서 이것을 제안했다고 생각하지 않습니다. 이것은 문제의 70 %와 같이 해결 될 것입니다. 다른 페이지의 경우 스크랩해야합니다. 전체 솔루션은 있지만 공개적이지 않습니다.

아래에 iframe에 추가

sandbox = "allow-same-origin allow-scripts 허용 팝업 허용 양식"

참고 URL : https://stackoverflow.com/questions/6666423/overcoming-display-forbidden-by-x-frame-options



반응형