보안 등급이란 무엇이고, 왜 중요한가요?
웹사이트 보안 등급은 SSL 설정, HTTP 보안 헤더, 알려진 취약점 노출 여부 등을 종합적으로 평가하여 A~F로 표시하는 지표입니다. 단순한 점수가 아니라 실제 공격에 얼마나 노출되어 있는지를 보여줍니다.
보안 등급이 낮으면 다음과 같은 실질적인 문제가 생깁니다.
- 구글 검색 순위 하락 (HTTPS 신호 반영)
- B2B 고객사 보안 감사에서 탈락
- 개인정보보호위원회 현장 조사 시 불이익
- XSS, 클릭재킹 등 실제 공격에 취약
A 등급을 위한 핵심 체크리스트
1. HTTPS 완전 전환 및 HSTS 적용
HTTP로 접근하면 자동으로 HTTPS로 리다이렉트해야 합니다. 여기서 끝이 아닙니다. Strict-Transport-Security 헤더를 설정해서 브라우저가 앞으로는 HTTP를 아예 시도하지 않도록 강제해야 합니다.
# Nginx 설정 예시
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
2. 보안 헤더 5개 필수 적용
아래 5개 헤더가 없으면 대부분의 보안 점검 도구에서 등급이 깎입니다.
Content-Security-Policy: XSS 방지. 허용할 리소스 출처를 명시합니다.X-Frame-Options: DENY: iframe 삽입 차단으로 클릭재킹 방어X-Content-Type-Options: nosniff: 브라우저의 MIME 타입 추측 차단Referrer-Policy: strict-origin-when-cross-origin: 리퍼러 정보 제어Permissions-Policy: 카메라, 마이크 등 브라우저 기능 접근 제어
3. 소프트웨어 버전 정보 숨기기
응답 헤더에 Server: nginx/1.18.0이나 X-Powered-By: PHP/8.1 같은 정보가 노출되면 해당 버전의 알려진 취약점을 바로 공격에 활용할 수 있습니다.
# Nginx에서 버전 숨기기
server_tokens off;
# Apache에서 버전 숨기기
ServerTokens Prod
ServerSignature Off
4. 열려 있는 포트 최소화
웹 서비스에 필요한 포트(80, 443)만 열어두고 나머지는 방화벽으로 차단합니다. 특히 DB 포트(3306, 5432, 27017)가 외부에 노출된 경우 즉시 차단해야 합니다. SSH 포트(22)는 특정 IP만 허용하거나 포트를 변경하는 것이 좋습니다.
5. 쿠키 보안 설정
세션 쿠키에는 반드시 HttpOnly와 Secure 플래그를 설정해야 합니다. HttpOnly는 JavaScript를 통한 쿠키 탈취를 막고, Secure는 HTTPS 연결에서만 쿠키가 전송되도록 합니다.
# Django 설정
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_HTTPONLY = True
CSRF_COOKIE_SECURE = True
등급별 점수 기준 (일반적인 기준)
- A등급 (90점 이상): 위 항목 대부분 충족. 알려진 취약점 없음.
- B등급 (70~89점): 일부 보안 헤더 누락. 마이너 취약점 존재.
- C등급 (50~69점): HSTS 미적용, 다수 헤더 누락.
- D등급 이하: HTTPS 미적용, 심각한 취약점 노출.
내 사이트 등급 바로 확인하기
설정이 제대로 되었는지 직접 확인하는 가장 빠른 방법은 보안 점검 도구를 사용하는 것입니다. CodeScan에서 URL을 입력하면 보안 헤더, SSL 설정, 노출된 취약점을 종합해서 등급과 점수로 보여줍니다. 어떤 항목을 수정해야 점수가 올라가는지 구체적으로 확인할 수 있습니다.
A 등급은 어렵지 않습니다. 위 체크리스트를 순서대로 적용하면 대부분의 사이트가 하루 이내에 도달할 수 있습니다.