우리 사이트가 남의 페이지 안에 액자처럼 박혀 가짜 화면으로 쓰인다 — 작은 회사 웹사이트가 갖춰야 할 보안 헤더 5가지

홈페이지를 멀끔하게 만들어 두고도, 어느 날 검색해 보면 우리 회사 화면이 낯선 주소의 페이지 안에 그대로 박혀 가짜 이벤트나 광고처럼 쓰이는 경우가 있다. 소스 코드에는 아무 문제가 없는데도 그렇다. 차이는 눈에 보이지 않는 한 줄, 서버가 브라우저에게 함께 보내는 보안 헤더(Security Headers)에 있다. 보안 헤더는 화면에 나타나지 않지만, 우리 사이트를 노리는 가장 흔한 공격들을 페이지 코드 수정 없이 막아 준다. 작은 회사가 꼭 챙겨야 할 다섯 가지를 정리했다.

1. HTTPS를 한 번 잠그면 계속 잠그게 한다 — HSTS

주소창의 자물쇠를 켜 뒀더라도, 고객이 실수로 http://로 접속하는 첫 순간은 암호화되지 않은 채 열려 있다. 공공 와이파이 같은 환경에서는 이 짧은 틈이 중간 가로채기의 입구가 된다. Strict-Transport-Security 헤더는 브라우저에게 "앞으로 이 도메인은 무조건 https로만 접속하라"고 기억시킨다.

Strict-Transport-Security: max-age=31536000; includeSubDomains

한 번 방문한 고객의 브라우저는 이후 1년간 우리 사이트를 자동으로 https로 바꿔 접속한다.

2. 남의 페이지가 우리 화면을 끼워 넣지 못하게 한다 — 클릭재킹 방어

공격자는 우리 사이트를 투명한 액자(iframe) 안에 숨겨 두고, 그 위에 가짜 버튼을 덧씌운다. 고객은 우리 사이트의 진짜 결제·동의 버튼을 누르고 있다고 믿지만 실제로는 공격자가 의도한 동작을 클릭하게 된다. 이를 클릭재킹이라 한다.

  • X-Frame-Options: DENY — 어떤 외부 페이지도 우리 화면을 액자에 넣지 못하게 한다.
  • 최신 방식은 CSP의 frame-ancestors 'none'으로 같은 효과를 더 정교하게 낸다.

3. 우리가 부르지 않은 스크립트는 돌지 못하게 한다 — CSP

Content-Security-Policy(CSP)는 보안 헤더의 핵심이다. "이 사이트에서 실행되는 스크립트·이미지·폰트는 내가 허락한 출처에서만 온다"고 브라우저에게 선언하는 규칙이다. 게시판이나 문의 폼에 악성 스크립트가 끼어드는 XSS 공격이 들어와도, 허락받지 않은 출처라면 실행 자체가 막힌다.

CSP는 처음부터 완벽하게 짜기 어렵다. 작은 회사라면 일단 default-srcframe-ancestors부터 좁게 설정하고, 외부 도구(지도·채팅·분석 스크립트)를 하나씩 허용 목록에 추가해 나가는 방식이 현실적이다.

4. 브라우저가 파일 종류를 멋대로 추측하지 못하게 한다 — nosniff

고객이 올린 이미지 파일이 사실은 스크립트였다면? 브라우저가 파일 내용을 보고 "이건 그냥 이미지가 아니라 실행 코드 같은데" 하고 추측해 실행해 버리는 경우가 있다. X-Content-Type-Options: nosniff 한 줄은 이 추측을 금지한다. 서버가 이미지라고 했으면 끝까지 이미지로만 다루게 만든다. 파일 업로드를 받는 모든 사이트가 반드시 켜야 할 헤더다.

5. 어디서 왔는지, 무엇을 쓸 수 있는지 새어 나가지 않게 한다

마지막은 정보 누수를 줄이는 두 헤더다.

  • Referrer-Policy: strict-origin-when-cross-origin — 고객이 우리 사이트에서 외부로 이동할 때, 어떤 페이지를 보고 있었는지(쿼리스트링에 담긴 정보까지)가 통째로 넘어가는 것을 막는다.
  • Permissions-Policy — 우리 사이트가 쓰지도 않는 카메라·마이크·위치 권한을 아예 차단해 둔다. 만약 사이트가 뚫리더라도 공격자가 고객의 장치 권한을 요구할 통로를 미리 닫아 두는 셈이다.

한 번 설정하면 매일 일하는 방어막

다섯 가지 헤더는 페이지를 다시 만들 필요 없이, 웹서버 설정(.htaccess·nginx)이나 Cloudflare 대시보드에서 몇 줄로 한 번에 적용할 수 있다. 적용한 뒤에는 securityheaders.com 같은 무료 도구에 우리 도메인을 넣어 점수를 확인하면 어떤 헤더가 빠졌는지 한눈에 보인다.

CYAN은 사이트를 만들 때 디자인과 기능만큼이나 이런 보이지 않는 기본기를 함께 챙긴다. 화면 뒤에서 매일 조용히 일하는 한 줄이, 결국 고객의 신뢰와 사장님의 밤잠을 지켜 주기 때문이다.