X-Frame-Options
The X-Frame-Options
HTTP 응답 헤더는 해당 페이지를 <frame>
또는<iframe>
, <object>
에서 렌더링할 수 있는지 여부를 나타내는데 사용됩니다. 사이트 내 콘텐츠들이 다른 사이트에 포함되지 않도록 하여 clickjacking 공격을 막기 위해 이 헤더를 사용합니다.
이 설정은 사용자가 X-Frame-Options
를 지원하는 브라우저를 통해 페이지에 접근할 경우에만 보안됩니다.
참고: Content-Security-Policy
HTTP 헤더에는 브라우저를 지원하기 위해 이 헤더를 사용하지 않도록 하는 frame-ancestors
지시문이 있습니다.
Header type | Response header |
---|---|
Forbidden header name | no |
Syntax
X-Frame-Options
과 관련해서는 다음의 3가지 설정이 가능합니다.
X-Frame-Options: deny X-Frame-Options: sameorigin X-Frame-Options: allow-from https://example.com/
Directives
deny
는 같은 사이트 내에서 frame을 통한 접근도 막습니다.
sameorigin
를 명시할 경우에는 frame에 포함된 페이지가 페이지를 제공하는 사이트와 동일한할 경우 계속 사용할 수 있습니다.
deny
-
어떠한 사이트에서도 frame 상에서 보여질 수 없습니다.
sameorigin
-
동일한 사이트의 frame에서만 보여집니다. 해당 스펙 안에서 브라우저 벤더가 최상위(top level), 혹은 부모(parent), 모든 체인(whole chain)에서 적용할지를 결정하도록 맡겨집니다. 하지만 모든 조상(ancestor)이 동일한 사이트에서 제공되지 않으면 이 옵션은 그다지 유용하지 않다고 논의되고 있습니다. (참고 Firefox bug 725490). 상세 지원사항에 대한 참고 Browser compatibility.
allow-from uri
-
지정된 특정 uri의 frame 에서만 보여집니다. Firefox에서는
sameorigin
과 동일한 문제를 겪고 있습니다. 즉 동일한 사이트에 있는지에 대해서 frame의 조상(ancestor)을 확인하지 않습니다.
예시
참고: 메타 테그 설정은 무용지물이다! 이를테면, <meta http-equiv="X-Frame-Options" content="deny">
태그는 아무런 영향을 미치지 않는다. 따라서 사용하지 말자! 오직 아래의 예제처럼 HTTP 헤더 설정을 통해서만 X-Frame-Options
이 동작한다.
Apache 설정
아파치에서 모든 페이지에 X-Frame-Options
헤더를 전송하려면, 사이트 설정에 다음의 설정을 추가합니다.
Header always set X-Frame-Options "sameorigin"
아파치에서 X-Frame-Options
거부(deny)하려면, 사이트 설정에 다음의 설정을 추가합니다.
Header set X-Frame-Options "deny"
아파치에서 특정 호스트(host)에서 X-Frame-Options
를 허용하려면(allow-from)
, 사이트 설정에 다음의 설정을 추가합니다.
Header set X-Frame-Options "allow-from https://example.com/"
nginx 설정
nginx에서 X-Frame-Options
헤더를 전송하려면 http, server, location 설정에 아래 설정을 추가합니다.
add_header X-Frame-Options sameorigin;
IIS 설정
ISS에서 X-Frame-Options
헤더를 전송하려면, 사이트의 Web.config
파일에 다음을 추가합니다.
<system.webServer>
...
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="sameorigin" />
</customHeaders>
</httpProtocol>
...
</system.webServer>
HAProxy 설정
HAProxy에서 X-Frame-Options
헤더를 전송하려면, front-end, listen, 혹은 backend 설정에 다음을 추가합니다.
rspadd X-Frame-Options:\ sameorigin
명세서
Specification |
---|
HTML Standard # the-x-frame-options-header |
브라우저 호환성
BCD tables only load in the browser