우리 사이트의 보안 헤더는 안녕하신가요 — CSP, HSTS, X-Frame-Options로 만드는 웹사이트 보안의 기본기

웹사이트 운영자에게 보안은 거대한 솔루션 도입처럼 느껴지기 쉽습니다. 그러나 실제로 가장 큰 효과를 내는 첫 번째 작업은 응답 헤더 몇 줄을 추가하는 일입니다. 보안 헤더는 브라우저에게 “우리 사이트는 이렇게만 동작해야 한다”라고 선언하는 짧은 명세이고, 이 한 줄이 XSS, 클릭재킹, 다운그레이드 공격의 절반을 차단합니다.

HSTS — HTTPS를 협상이 아닌 의무로 만든다

Strict-Transport-Security는 한 번 방문한 브라우저가 다음부터는 무조건 HTTPS로만 접속하도록 강제하는 헤더입니다. 카페 와이파이에서 누군가 HTTP 버전으로 가로채려 해도 브라우저가 HTTP 요청 자체를 차단합니다. max-age=31536000; includeSubDomains 로 시작하고, 모든 서브도메인이 HTTPS인 것을 확인한 뒤에 preload 옵션을 붙여 HSTS 프리로드 리스트에 등록하세요. 한 번 등록하면 인증서 갱신 사고가 나도 첫 방문자까지 보호됩니다.

Content-Security-Policy — XSS의 가장 단단한 방어선

CSP는 우리 페이지에서 어떤 스크립트, 이미지, iframe이 실행될 수 있는지 화이트리스트로 선언합니다. 광고 태그가 변조되거나 댓글에 악성 스크립트가 끼어들어도 허용된 출처가 아니면 브라우저가 실행을 거부합니다. 처음부터 완벽한 정책을 만들 필요는 없습니다. Content-Security-Policy-Report-Only 모드로 며칠 운영하며 위반 보고를 모은 뒤, 실제 사용하는 출처만 허용으로 좁혀가는 방식이 가장 안전합니다. 인라인 스크립트가 많은 사이트라면 nonce 또는 hash 기반 정책으로 시작하세요.

X-Frame-Options와 frame-ancestors — 클릭재킹을 막는다

공격자가 우리 사이트를 투명한 iframe에 띄우고 그 위에 가짜 버튼을 겹쳐, 사용자가 의도치 않은 행동을 하게 만드는 것이 클릭재킹입니다. X-Frame-Options: DENY는 어떤 사이트도 우리 페이지를 iframe으로 임베드하지 못하게 막습니다. 자사 도메인만 허용해야 한다면 SAMEORIGIN, 더 정밀한 통제가 필요하면 CSP의 frame-ancestors 지시어로 화이트리스트를 명시하세요. 결제, 로그인, 관리자 페이지에는 무조건 적용해야 하는 헤더입니다.

X-Content-Type-Options — MIME 스니핑의 자취를 끊는다

일부 브라우저는 서버가 보낸 Content-Type을 무시하고 응답 내용을 추측해 실행합니다. 이미지처럼 보이는 파일에 자바스크립트가 숨겨져 있으면 그대로 실행되는 사고가 벌어집니다. X-Content-Type-Options: nosniff 한 줄이면 브라우저는 선언된 타입만 신뢰합니다. 사용자 업로드를 받는 모든 사이트에서 가장 먼저 켜야 하는 가장 저렴한 보안 장치입니다.

Referrer-Policy와 Permissions-Policy — 정보와 권한을 다스린다

Referrer-Policy: strict-origin-when-cross-origin은 외부 사이트로 이동할 때 우리 URL의 경로와 쿼리 파라미터가 그대로 새는 것을 막아 줍니다. 결제 토큰이나 검색어가 광고 네트워크 로그에 남는 사고를 피할 수 있습니다. Permissions-Policy는 카메라, 마이크, 위치, 결제 API 같은 강력한 기능을 누가 사용할 수 있는지 제한합니다. 사용하지 않는 기능은 처음부터 모두 꺼두는 것이 원칙입니다.

한 번에 켜지 말고, 깨지지 않게 도입한다

다섯 헤더를 한꺼번에 활성화하면 사이트가 깨질 가능성이 높습니다. 권장 순서는 호환성 위험이 적은 X-Content-Type-OptionsReferrer-Policy부터, 다음으로 X-Frame-OptionsPermissions-Policy, 마지막으로 CSP를 Report-Only로 충분히 다듬은 뒤 활성화하는 것입니다. securityheaders.com이나 Mozilla Observatory에서 점수를 확인하면 빠진 헤더와 약한 정책을 한눈에 잡을 수 있습니다.

보안 헤더는 코드 한 줄로 시작해 사이트 전체의 위험도를 크게 낮추는, 가장 비용 효율이 좋은 보안 작업입니다. CYAN 에이전시는 신규 웹사이트 구축은 물론 운영 중인 사이트의 보안 점검과 헤더 적용까지 함께 진행하고 있으니, 우리 사이트가 안전하게 닫혀 있는지 확인이 필요하다면 부담 없이 문의 주시기 바랍니다.