Refused to display in a frame because it set 'X-Frame-Options' to 'DENY'. 에러의 원인과 해결방법

Posted on 2017-02-22 17:25:23


laravel-filemanager가 제대로 동작하지 않는 문제를 발견했다. 서버쪽 로그에는 별다른 메시지가 없었고, 크롬 개발자도구를 이용하여 원인을 분석하다가 아래와 같은 에러메시지를 발견하였다.

Refused to display 'https://slobell.com/...' in a frame because it set 'X-Frame-Options' to 'DENY'.

 구글에서 검색을 좀 해보니, X-FRAME-Options는 Clickjacking 공격을 방어하기 위해 사용된다고 한다. X-FRAME-Options는 브라우저가 <frame>, <iframe>, <object> 내의 페이지를 렌더링할지 여부를 지정하는 데 사용된다. 타사이트에 자신의 컨텐츠가 포함(embed)되는 것을 막아서, clickjacking 공격을 회피하는 데 이 옵션이 사용된다.

 X-FRAME-Options 옵션에 아래 3가지 값 중에서 하나를 지정할 수 있다.

1. DENY : 페이지를 frame 내에서 표시할 수 없다.

2. SAMEORIGIN : 동일한 origin인 경우 페이지를 frame 내에서 표시할 수 있다.

3. ALLOW-FROM uri : 지정된 origin의 페이지를 frame 내에서 표시할 수 있다.

 X-FRAME-Options에 어떤 값이 넘어오는지 우선 확인해보았다. 크롬 개발자도구로 Http response header를 살펴보니 X-FRAME-Options값이 DENY인 것을 확인할 수 있었다.

x-frame-options-deny


이 값을 변경하려고 Apache 설정파일의 내용을 수정하였다.(http를 사용하는 경우에는 httpd.conf를 수정해야 한다고 한다.)

• /etc/httpd/conf.d/ssl.conf

Header always set X-Frame-Options DENY        (수정전)
Header always set X-Frame-Options SAMEORIGIN (수정후)

그리고 Apache 웹서버를 재시작하면 Http response header의 X-FRAME-Options값이 SAMEORIGIN으로 변경된 것을 확인할 수 있다. 물론 laravel-filemanager도 정상적으로 동작하게 되었다.

x-frame-options-sameorigin