반응형
타진
개발 그라운드
타진
전체 방문자
오늘
어제
  • 분류 전체보기 (136)
    • 프로그래밍 (65)
      • Java (28)
      • Android (1)
      • Web (19)
      • Web-Spring (12)
      • R (5)
      • Angular (0)
    • 운영체제 (17)
      • Linux (14)
      • Docker(vmware) (3)
    • 클라우드 (4)
      • aws (0)
      • aws_handson (4)
    • 개발문제해결 (25)
      • Exception (12)
      • 알고리즘 문제풀이 (13)
    • 그 외 개발관련 (23)
    • 일상 (1)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 일어키보드
  • wsl_update_x64
  • 라이젠
  • handson
  • github
  • Github CLI
  • AWS
  • alt tab
  • GIT
  • stackset
  • 문법 체크
  • 4700u
  • transit_gateway
  • docker desktop
  • ubuntu terminal
  • transit gateway peering
  • 크로미움 엣지
  • docker ps
  • github actions
  • cfn
  • 키보드매핑
  • jdk14
  • docker
  • 빠른 시작 끄기
  • 정올알고리즘 정올 알고리즘
  • vmmem
  • wsl2
  • angular cli
  • chromium edge
  • 빠른 시작 켜기

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
타진

개발 그라운드

X-Frame-Options이란? (에러 it set 'X-Frame-Options' to 'sameorigin')
그 외 개발관련

X-Frame-Options이란? (에러 it set 'X-Frame-Options' to 'sameorigin')

2020. 9. 22. 13:34
반응형


X-Frame-Options이란?

 보통 클라이언트 쪽에서 iframe을 사용할 때 볼 수 있는 에러에서 확인이 가능한데, 이는 iframe태그 등에서 외부 참조가 가능/불가능을 설정할 수 있는 통신 설정이다. iframe 이외에도 object, embeded 태그를 사용할 때 볼 수 있다. 이 에러를 보았다면 html 연습이든 프론트 개발이든 iframe을 사용할 때 이 에러가 발생했을 것이다.

 

Refused to display ... in a frame because it set 'X-Frame-Options' to 'sameorigin'.

 

 


어떻게 확인하는가?

 

 확인방법은 간단하다. iframe 등 태그로 참조하길 바라는 사이트에 접속한다. 나의 경우는 Google이다. 그 뒤 F12를 눌러 개발자 도구의 네트워크 부분에 들어가, 모두 표시를 한 뒤 메인 페이지의 리스폰스 정보를 확인하자.

 

확인해보면 위와같이 x-frame-options 옵션이 SAME ORIGIN으로 되어있다. SAME ORIGIN은 같은 도메인 내에서의 참조만 허용하겠다는 것이다. 내가 구글 직원이어서입사하고싶다 구글 도메인을 사용하지 못하는 이상 iframe으로 구글을 참조하는 것은 불가능하다.


왜 이런 옵션이 존재하는가?

 

개발자 입장에서는 왜 이런 번거로운 옵션이 존재해서 날 힘들게 하냐..라고 생각할 수 있다. 하지만 모든 설정엔 이유가 있듯이 X-Frame 옵션도 이유가 존재한다.

 

 

  • iframe을 이용한 간단 디도스 공격

공격하고자 하는 페이지를 참조하는 iframe 태그를 다수 만든다. 그리고 로드를 반복하면 한 번의 로드에 수십, 수백 개의 리퀘스트가 발생하니 간단하고 손쉽게 디도스 공격을 요청할 수 있다.

 

 

  • 클릭재킹 공격

웹페이지에서 iframe 태그를 숨겨놓고 실제 페이지의 클릭을 iframe내의 클릭으로 인식되게끔 자바스크립트 코드를 작성한다. 예를 들어 실제 페이지에서 싫어요 버튼을 클릭했음에도, iframe내의 좋아요 버튼을 클릭되게끔 유도할 수 있다.

 

 

 

위와 같은 이유가 있지만, 단순히 자신의 페이지가 남의 페이지에서 사용될 수 있다는 가능성이 좀 꺼림칙하니, 보통 전부 false로 처리해서 이용을 못하게 하는 것이 일반적이다. 

 


해결방법

 사실 원칙적으로는 서버단에서 막고 있다면 클라이언트 쪽에서 할 수 있는 일은 없다. 그냥 참고 감수하는 방법 이외에는.. 자신의 개발이 서버를 겸하고 있고, 테스트를 위해 필요하다. 싶은 경우 원하는 페이지의 html 메타데이터나 서버 리스폰스 헤더 설정을 조사해보면 X-Frame-Options 설정이 있을 것이다. 이를 설정해주면 iframe으로 참조가 가능하다.

 나는 서버 개발을 겸하고 있지 않다! 또는 서버 개발 쪽에 괜히 설정 수정해달라고 말하는 거 귀찮다! 싶은 사람들은 일단 임시 방책으로 크롬 확장 기능으로 대체할 수 있다.

 

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

 

 

인스톨 후 구글을 iframe으로 참조해보면 짜잔

 

참조가 가능하다. 이 확장의 내부 코드를 읽어보지 않아서 어떤 방법으로 X-Frame 옵션을 무시하는지는 알 수가 없지만, 추측하기에는 두 가지 방법이 있는 것 같다. 이 부분은 내 추측이니 참고 삼아한 귀로 듣고 흘려주시길 바란다.


 첫째로 html태그에서 false처리되어있다면, 크롬 확장이 중간에 리스폰스 정보를 가로채서 그 부분을 허용으로 바꾸고 돌려준다. 이러면 브라우저는 허용된 사이트라 생각하고 iframe을 띄어준다.

 두 번째 방법으로는 리퀘스트를 보내기 직전 확장이 이를 가로채서 일반적인 접근 인양 속여서 서버에 정보를 보내는 방법이다. 이러면 서버단은 그냥 구글에 접속했다 판단할 테니 그냥 리스폰스를 보내고 브라우저는 이를 받고 표시해준다.

 


Source

  • https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/X-Frame-Options
반응형
저작자표시 비영리 변경금지 (새창열림)

'그 외 개발관련' 카테고리의 다른 글

powershell 터미널 프로필 현재 디렉토리만 보이게 설정  (0) 2020.09.26
크로미움 엣지 알트탭(alt + tab) 시 탭 분할 비활성화 방법  (61) 2020.08.30
크롬 확장 개발 시 Intellij(그 외 jetbrain IDE)에서 문법 체크 설정  (1) 2020.08.24
    '그 외 개발관련' 카테고리의 다른 글
    • powershell 터미널 프로필 현재 디렉토리만 보이게 설정
    • 크로미움 엣지 알트탭(alt + tab) 시 탭 분할 비활성화 방법
    • 크롬 확장 개발 시 Intellij(그 외 jetbrain IDE)에서 문법 체크 설정
    • hyper 터미널로 윈도우 개발환경 개선하기 (파워쉘 기본 설정, 테마, 플러그인)
    타진
    타진
    vulnerable1324@gmail.com

    티스토리툴바