iframe에서 'X-Frame-Options'를 설정하는 방법은 무엇입니까?


170

이런 식으로 만들면 iframe:

var dialog = $('<div id="' + dialogId + '" align="center"><iframe id="' + frameId + '" src="' + url + '" width="100%" frameborder="0" height="'+frameHeightForIe8+'" data-ssotoken="' + token + '"></iframe></div>').dialog({

오류를 어떻게 해결할 수 있습니까?

'https://www.google.com.ua/?gws_rd=ssl''X-Frame-Options'가 'SAMEORIGIN'으로 설정되어 프레임 에 표시 되지 않습니다.

JavaScript로?

답변:


227

당신은 설정할 수 없습니다 X-Frame-Optionsiframe. 리소스를 요청하는 도메인에서 설정 한 응답 헤더입니다 ( google.com.ua예제에서). SAMEORIGIN이 경우 헤더를 설정했습니다. 즉, iframe도메인 외부 에서 리소스를로드 할 수 없습니다 . 자세한 내용은 MDN 의 X-Frame-Options 응답 헤더 를 참조하십시오 .

여기에 Chrome 개발자 도구에 표시된 헤더를 빠르게 검사 X-Frame-Options하면 호스트에서 반환 된 값이 표시됩니다.

여기에 이미지 설명을 입력하십시오


7
YouTube를 사용하면 엔드 포인트 URL을 "포함"버전으로 변경할 수 있습니다. stackoverflow.com/questions/25661182/…를 참조하십시오. (OP가 검색하는 것이 엄격하지는 않지만 Google이 먼저 결과를 제공합니다!)

73

X-Frame-Options요청 된 도메인이 프레임 내에 표시 될 수 있는지 여부를 나타내는 상태 요청 에 대한 응답 에 포함 된 헤더 입니다. Javascript 또는 HTML과는 아무런 관련이 없으며 요청을 보낸 사람이 변경할 수 없습니다.

이 웹 사이트는이 헤더가에 표시되지 않도록 설정했습니다 iframe. 고객이이 행동을 막기 위해 할 수있는 일은 없습니다.

X-Frame-Options에 대한 추가 자료


요청 헤더가 아닌 응답 헤더에 설정됩니다. 그러나 그렇지 않으면 정확한 설명!
nickang

2
@nickang 그것이 내가 의미하는 바이지만 용어가 명확하지 않다는 데 동의합니다. 혼란을 제거하기 위해 편집했습니다. 감사.
Rory McCrossan

31

iframe의 내용을 보내는 서버를 제어하는 ​​경우 X-Frame-Options웹 서버에서 설정을 지정할 수 있습니다 .

아파치 설정

모든 페이지에 대해 X-Frame-Options 헤더를 보내려면 사이트 구성에 다음을 추가하십시오.

Header always append X-Frame-Options SAMEORIGIN

nginx 구성

Xgin-Frame-Options 헤더를 보내도록 nginx를 구성하려면 http, 서버 또는 위치 구성에 추가하십시오.

add_header X-Frame-Options SAMEORIGIN;

구성이 없습니다

이 헤더 옵션은 선택 사항이므로 옵션이 전혀 설정되지 않은 경우 다음 인스턴스 (예 : 방문자 브라우저 또는 프록시)에이를 구성 할 수있는 옵션이 제공됩니다.

출처 : https://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options


이것은 나를 도왔다. add_header Strict-Transport-Security "max-age=86400; includeSubdomains"; add_header X-Frame-Options DENY;nginx-snippets 에서이 두 줄을 주석 처리 한 다음 곧바로 작동했습니다.
Zeth

NGINX, 내부 위치 를 말해야 하는가?
피터 크라우스

피터 크라우스, 무엇을 원하세요?
rubo77

14

솔루션이 서버 측에서 실제로 언급되지 않았기 때문에 :

이와 같은 것을 설정해야합니다 (아파치의 예). 이것은 모든 것에서 허용하는 최상의 옵션은 아니지만 서버가 올바르게 작동하는 것을 본 후에는 쉽게 설정을 변경할 수 있습니다.

           Header set Access-Control-Allow-Origin "*"
           Header set X-Frame-Options "allow-from *"

5

정말 ... 나는 사용했다

 <system.webServer>
     <httpProtocol allowKeepAlive="true" >
       <customHeaders>
         <add name="X-Frame-Options" value="*" />
       </customHeaders>
     </httpProtocol>
 </system.webServer>

이것은 해결책처럼 보이지만 이것이 보안 위반입니까?
Yogurtu

1
그건 하지 당신이 무엇을하는지 정확히 알지 못하면 귀하의 사이트에 대한 비활성화 동일 출처 정책에 대한 좋은 아이디어. 귀하와 다른 도메인이 콘텐츠를 포함하도록 허용해서는 안됩니다. codecademy.com/articles/what-is-cors 및 유사한 자습서를 참조하십시오 .
slhck


2

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

자세한 정보 : https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options

이 문제에 대한 대체 솔루션이 있는데, PHP를 사용하여 설명하겠습니다.

iframe.php :

<iframe src="target_url.php" width="925" height="2400" frameborder="0" ></iframe>

target_url.php :

<?php 
  echo file_get_contents("http://www.example.com");
?>

5
페이지를로드 한 후 사용할 수있는 실용적인 솔루션입니까? 초기로드 후 페이지와 상호 작용할 수 있습니까? 로드 된 후 컨텐츠를 사용하기 위해 도메인에 대한 모든 요청을 프록시하지 않아도됩니까?
Timothy Gonzalez

0

이를 위해서는 아파치 또는 사용중인 다른 서비스의 위치와 일치해야합니다.

아파치를 사용하는 경우 httpd.conf 파일에서.

  <LocationMatch "/your_relative_path">
      ProxyPass absolute_path_of_your_application/your_relative_path
      ProxyPassReverse absolute_path_of_your_application/your_relative_path
   </LocationMatch>

0

해결책은 브라우저 플러그인을 설치하는 것입니다.

문제 HTTP 헤더를 웹 사이트 X-Frame-Options의 값 DENY(또는 SAMEORIGIN당신이 무시 브라우저 플러그인을 설치하여이 동작을 변경하지 않는 한 다른 서버 원점가) ... IFRAME을 통합 할 수 없습니다 X-Frame-Options(예를 들어, 헤더 크롬의 무시 X-프레임 헤더 ).

보안상의 이유로이 방법은 전혀 권장되지 않습니다.


0

iframe에로드하려는 사이트의 웹 구성에서 x-frame-option을 다음과 같이 설정할 수 있습니다

<httpProtocol>
    <customHeaders>
      <add name="X-Frame-Options" value="*" />
    </customHeaders>
  </httpProtocol>

stackoverflow를 열려면 웹 구성을 어디에서 찾을 수 있습니까? 서버 측에 적합하지 않습니까?
irum zahra

-1

사이트 소유자가 제공해야하며 서버 규칙 내에 있으므로 HTML 본문에 x-iframe을 실제로 추가 할 수 없습니다.

당신이 할 수있는 일은 대상 URL의 내용을로드하는 PHP 파일을 만들고 해당 PHP URL을 iframe하는 것입니다. 이는 원활하게 작동합니다.


1
"아마도 가능하다"라고 대답하지 않으면 코멘트로 게시하십시오
MK

그것은 응답 MK 것으로 판명 어떤 경우
Sushant 차우

그런 다음 특정 해결책이 아니라 효과가있는 제안이므로 주석으로 배치해야합니다.
MK

-2

Tomcat 인스턴스 레벨 구성 파일 (web.xml)에서 수행 할 수 있습니다 .web.xml 구성 파일에 'filter'및 filter-mapping '을 추가해야합니다. 전역 설정이므로 모든 페이지에 [X-frame-options = DENY]가 추가됩니다.

<filter>
        <filter-name>httpHeaderSecurity</filter-name>
        <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
        <async-supported>true</async-supported>
        <init-param>
          <param-name>antiClickJackingEnabled</param-name>
          <param-value>true</param-value>
        </init-param>
        <init-param>
          <param-name>antiClickJackingOption</param-name>
          <param-value>DENY</param-value>
        </init-param>
    </filter>

  <filter-mapping> 
    <filter-name>httpHeaderSecurity</filter-name> 
    <url-pattern>/*</url-pattern>
</filter-mapping>

-3

xml 접근 방식을 따르는 경우 아래 코드가 작동합니다.

    <security:headers>
        <security:frame-options />
        <security:cache-control />
        <security:content-type-options />
        <security:xss-protection />
    </security:headers>
<security:http>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.