Post

HTTP Security Headers (Http 보안 헤더)

HTTP Strict Transport Security (HSTS)


간단하게 해당 WEB에 접근할 때 강제로 HTTPS로 강제적으로 접근하도록하는 헤더이다. 간혹 HTTP로 접근 시 강제로 HTTPS로 접속하도록 한다.
HTTPS를 강제하므로써 SSL Strip 공격을 방어할 수 있는 보안 헤더, 다만 서브도메인이 허용되어 있을 경우 우회할 가능성이 존재한다.
브라우저 내부에 HSTS List를 구성하고 있어 헤더의 정보들이 저장된다.(max-age 등)

Values

이름설명
max-age초 단위로 설정되며, 브라우저에서 설정될 시간을 나타냄
includeSubdomains해당 도메인의 서브도메인까지 설정할 것인지 나타냄
preload브라우저의 Preload list에 추가하므로써 헤더가 없더라도 list에 존재할 경우 브라우저가 강제로 HTTPS로 요청도록 함

Example

1
2
Strict-Transport-Security: max-age=<expire-time> ; includeSubDomains
Strict-Transport-Security: max-age=<expire-time>; preload;



Content-Security-Policy (CSP)


대표적으로 XSS을 예방하는 보안 헤더로써, 태그 및 Contents의 출처에 대한 제한 및 허용 값을 헤더 값에 포함 시켜 브라우저가 응답 값의 인라인 스크립트의 실행을 제한한다.

태그를 이용하여 응답 값에 추가할 수 있고, 응답 헤더에 사용할 수 있다.

지시문(일부)

이름설명
default-src디폴트를 설정
connect-srcajax, websockets등 다른 URL 연결을 제한
script-srcscript 사용 시 해당 출처를 제한
child-srciframe 태그 등 inner contents를 제한
style-srcCSS 출처를 제한
font-srcWeb Font의 출처를 제한
img-srcImage의 출처를 제한
media-srcmedia의 출처를 제한
object-srcobject태그 사용 시 출처를 제한

Src Values

이름설명
self현재 도메인만 허용
none모든 도메인을 제한
특정 도메인 및 호스트http://www.foo.com, foo.com:80, foo.com:443
unsafe-inline해당 항목은 인라인으로 사용되는 것을 허용
nonce-‘value’nonece-‘value’ 라는 속성 값을 사용할 경우, 해당 항목을 허용

Example (meta tag)

1
<meta http-equiv="Content-Security-Policy" content="default-src 'self' trust.com *.trust.com; script-src 'nonce-aaaaaaaaaa' img-src https://*;">

Example (Response Headers)

1
Content-Security-Policy: default-src 'self' trust.com *.trust.com; script-src 'nonce-aaaaaaaaaa' img-src https://*;

Example

1
2
3
4
5
6
<script src='http://foo.com/assets/js/example.js'></script> //사용불가
<script> alert('xss'); </script> //사용불가
<script nonce=aaaaaaaaaa> alert('XSS'); </script> //사용가능

<img src='http://foo.com/assets/img/foo.png'> //사용 불가
<img src='https://foo.com/assets/img/foo.png'> //사용 가능



X-Frame-Options


HTML에 다른 페이지나 컨텐츠를 삽입할 수 있는 <frame>, <iframe>, <object> 등의 태그를 이용한 ClickJacking 공격에 대응할 수 있는 보안 헤더이다.

Values

이름설명
DENY다른 페이지 및 컨텐츠를 표시 제한
SAMEORIGIN같은 도메인의 페이지 및 컨텐츠는 허용
ALLOW-FROM uriuri에 도메인을 추가하여 해당 도메인이 페이지나 컨텐츠를 허용

Example

1
2
3
X-Frame-Options: deny
X-Frame-Options: sameorigin
X-Frame-Options: allow-from https://example.com/



X-XSS-Protection (Deprecate)


XSS 공격을 방어하기 위한 보안 헤더로 브라우저에 내장된 XSS 필터를 통해 공격을 방지하도록한다.
응답 값에는 정상적으로 XSS 공격하였더라도 브라우저의 해당 공격을 필터링할 경우 작동되지 않도록 한다. 이는 각각 브라우저 마다 필터나 성능의 차이로 인해 차단되는 경우는 상이하다. 그로 인해 CSP 헤더 사용을 권고한다.

Values

이름설명
0XSS 필터링을 비활성화
1XSS 필터링을 활성화, 탐지된 영역을 제거한 후 랜더링
1; mode=blockXSS 필터링을 활성화, 공격 탐지 시 페이지 랜더링을 중단
1; report=XSS 필터링을 활성화, 공격 탐지 시 해당 uri로 리포팅 (Chromium만 지원)

Example

1
2
3
4
X-XSS-Protection: 0; // 비활성화
X-XSS-Protection: 1; // 활성화, 랜더링
X-XSS-Protection: 1; mode=block // 활성화, 랜더링 중단
X-XSS-Protection: 1; report=foo.com // 활성화, 랜더링 중단, 해당 uri로 리포팅
This post is licensed under CC BY 4.0 by the author.