서론
회사에 보안설정을 요구하는 문서가 날라왔습니다. 클라이언트에서는 헤더에 관련 설정을 해주어 보안에 신경쓸 수 있습니다.
Content-Security-Policy
브라우저에서 XSS와 관련된 공격을 막아주는 헤더입니다. 기본적으로 브라우저는 페이지에서 요청하는 모든 코드를 다운로드하여 실행합니다.
하지만 이 Content-Security를 설정함으로서 브라우저에게 특정 조건의 리소스만을 실행하라고 전달합니다.
여러가지 값이 전달될 수 있는데, default-src, script-src, child-src 등이 있습니다.
X-Frame-Option
이 헤더는 해당 페이지가 frame, iframe, object에서 렌더링을 할 수 있는지 여부를 나타냅니다. 이 헤더를 이용하면 사이트 내 콘텐츠가 다른 사이트에 포함되지 않도록 하여 clickjacking 공격으로부터 보호합니다.
- deny: 같은 사이트 내에서도 frame, iframe, object로 가지고 오는 것을 막습니다.
- sameorigin: 동일한 사이트에서만 허용합니다.
- alllow-from [URL]: 지정한 URL에서만 허용합니다.
X-Content-Type-Option
이 헤더는 리소스 다운시 해당 리소스의 MIMETYPE이 일치하지 않는 경우 차단할 수 있습니다. 값은 nosniff 입니다.
Strict-Transport-Security
이 헤더는 사이트에 https로 한번이라도 접속을 하는 경우 모든 요청을 https로 요청합니다. http도 자동으로 https로 변환합니다.
그리고 https로 전송한 요청을 중간에서 가로채 내용을 보는 MIMT를 클라이언트에서 차단할 수 있습니다.
Strict-Transport-Security: max-age=[expire-time]; includeSubDomains|preload 처럼 설정할 수 있습니다.
max-age는 이 사이트가 https로만 접근되어야 한다고 기억되어야 하는 시간을 지정합니다.
includeSubDomains는 이 사이트의 모든 서브 도메인에 규칙이 적용된다는 것을 의미합니다.
그리고 preload는 도메인이 안전하지 않은 연결을 하지 않습니다.
X-XSS-Protection
X-XSS-Protection 헤더는 공격자가 XSS 공격을 시도할 때 브라우저의 내장 XSS filter를 통해 공격을 방지하고자 하는 헤더입니다.
X-XSS-Protection: 0 | 1; mode=block;
0일 경우 필터링을 비활성화하고, 1은 활성화합니다. 필터에 걸리는 요소들을 제거합니다.
mode=block일 경우, XSS 필터에 걸리는 요청이 오면 페이지 렌더링을 중단합니다.
Cache-Control
이 헤더는 캐싱을 정하는 헤더입니다. Cache-Control: no-store | no-cache | mush-revalidate | public | private; max-age=[number]
no-store은 아무것도 캐싱하지 않겠다는 의미입니다.
no-cache는 모든 캐시를 쓰기 전에 서버에게 캐시를 사용해도 되는지 물어보는 속성입니다.
- must-revalidate: 만료된 캐시만 서버에 확인 받도록 하는 속성입니다.
- public: 공유 캐시에 저장해도 된다는 의미를 가진 속성입니다.
- private: 브라우저와 같은 특정 사용자 환경에만 저장하는 속성입니다.
- max-age=[number]: 캐시 유효기간을 지정해주는 부분입니다.
Pragma
이 헤더는 요청과 응답에 영향을 줄 수 있는 캐시에 관련된 헤더입니다. 단 한개의 속성을 가지고 있습니다.
Pragma: no-cache;
캐시가 캐시 복사본을 릴리즈하기 전 서버로 요청을 보내 유효성 검사를 강제하는 속성입니다.