Defaults.Exposed

Defaults.Exposed수정 › 콘텐츠 보안 정책 (CSP)

콘텐츠 보안 정책 (CSP) 수정 방법

콘텐츠 보안 정책은 웹사이트가 모든 방문자의 브라우저에 전달하는 안전 규칙으로, 어떤 코드가 실행 허용되는지 정확히 지시합니다. 이 설정이 없으면 댓글 입력란, 해킹된 플러그인, 서드파티 스크립트 등을 통해 악성 코드가 페이지에 들어올 경우 브라우저가 자유롭게 실행합니다. 자물쇠가 여전히 표시되는 상태에서 고객이 입력하는 카드 번호와 비밀번호를 조용히 탈취하는 코드 실행도 포함됩니다.

비즈니스에 미치는 핵심 영향: 사이트가 변조되면 악성 코드가 모든 것이 완전히 정상으로 보이는 상태에서 귀사 결제 페이지에서 고객의 카드 정보와 로그인 정보를 직접 읽을 수 있습니다. 결과는 환불 요청, 사기 신고, 보고 의무가 있는 데이터 유출, 그리고 대형 고객사의 보안 팀이 거래를 지연시키거나 취소하는 데 사용하는 검사 실패입니다.

발생 가능한 비용

중요한 이유. 자물쇠는 사이트 연결이 개인적임을 증명하지만 방문자가 페이지에 있는 동안 어떤 코드가 실행되는지 제어하지 않습니다. 콘텐츠 보안 정책은 그것을 수행하는 안전장치입니다. 단일 변조된 필드, 광고, 또는 플러그인이 고객의 돈과 데이터를 훔치는 도구로 전환될 수 없도록 신뢰하지 않는 소스의 스크립트를 무시하도록 브라우저에게 지시합니다.

쉬운 설명

누군가 웹사이트를 방문하면 브라우저가 페이지를 다운로드하고 그 안의 모든 코드를 실행합니다. 기본적으로 브라우저는 모든 것을 신뢰합니다. 어떤 코드가 진짜 귀사의 것이고 어떤 것이 외부인이 삽입한 것인지 알 방법이 없습니다.

콘텐츠 보안 정책(CSP)은 웹사이트가 모든 페이지에 첨부하는 규칙 목록으로, 브라우저에게 이렇게 말합니다: “이 승인된 소스의 코드만 실행하고 다른 것은 모두 거부하세요.” 손님 명단이 있는 나이트클럽과 손님 명단 없이 누구나 들어오는 나이트클럽의 차이입니다.

이것이 중요한 이유: 웹사이트는 끊임없이 변조됩니다 — 서버를 해킹하지 않고도 댓글 필드, 검색 창, 오래된 플러그인, 광고나 분석을 위한 서드파티 스크립트, 채팅 위젯을 통해 들어올 수 있습니다.

비즈니스 피해 사례

CSP의 실제 작동 방식

콘텐츠 보안 정책은 단일 HTTP 응답 헤더로 전달됩니다. 예를 들어:

Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self'

쉬운 말로: 기본적으로 내 자체 사이트의 것만 로드하고, 내 자체 사이트의 스크립트만 실행하며, 오래된 스타일 플러그인은 허용하지 말고, 다른 사이트가 내 사이트를 프레임 안에 넣지 못하게 합니다.

좋은 상태는 헤더의 존재만 확인하는 것이 아니라 정책을 지시어별로 읽고 실제로 얼마나 강한지 채점합니다:

수정 방법 (무료, 약 1~2시간)

IT 담당자나 웹사이트를 담당하는 사람에게 이 섹션을 전달하세요 — 수정 자체는 완전히 무료입니다.

  1. 보고만 모드로 시작 — 아직 시행하지 마세요. Content-Security-Policy-Report-Only 응답 헤더를 추가합니다.

  2. 사이트가 실제로 사용하는 것으로 정책 구축. 보고서를 검토해 모든 합법적인 스크립트, 스타일, 폰트, 이미지 소스를 찾습니다.

  3. 전체 요점을 무너뜨리는 허점 피하기. 스크립트에 'unsafe-inline''unsafe-eval', 와일드카드 소스를 피하세요.

  4. 프레이밍과 플러그인 제한. frame-ancestors 'self'object-src 'none' 추가.

  5. 보고만에서 시행으로 전환. 보고서가 깔끔하고 사이트가 작동하면 헤더 이름을 Content-Security-Policy-Report-Only에서 Content-Security-Policy로 변경합니다. 이것이 실제로 보호를 제공하는 단계입니다.

    헤더 설정 위치:

    • Cloudflare: 규칙 → Transform 규칙 → 응답 헤더 수정
    • Nginx: add_header Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self';" always;
    • Apache: Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self';"
  6. 도메인 재확인.

흔한 실수

FAQ

기술적 지식이 없는데 직접 처리할 수 있나요?

세부 내용을 이해할 필요가 없습니다. 이것은 웹사이트나 호스팅을 담당하는 사람이 추가하는 설정입니다. 아래 '수정 방법' 섹션을 전달하세요. 무료입니다. 한 가지 주의: 귀사 자체 사이트 일부를 실수로 차단하지 않도록 먼저 감시 전용 시험 모드에서 출시해야 합니다.

이미 자물쇠와 SSL 인증서가 있습니다 — 사이트가 안전하지 않나요?

자물쇠는 페이지 전달을 보안화합니다. 페이지 내에서 실행되는 것을 감시하지 않습니다. 악성 코드가 페이지에 들어오면 — 해킹된 플러그인, 손상된 광고, 삽입된 필드를 통해 — 자물쇠가 데이터 도용을 막지 않습니다.

이것을 켜면 사이트가 손상될 수 있나요?

한꺼번에 공격적으로 켜면 그럴 수 있습니다. 표준 접근 방식은 '보고만' 시험 모드에서 시작해 표시된 것을 수정하고 그 후에만 시행하는 것입니다.

이미 '보고만' 모드로 설정했습니다 — 보호받고 있나요?

아닙니다. 보고만 모드는 차단될 것을 감시하고 기록하지만 아무것도 차단하지 않습니다. 방문자는 실제 보호를 전혀 받지 못합니다. 시행 모드로 전환할 때만 보호됩니다.

이것이 등급에 영향을 미치나요, 아니면 조언일 뿐인가요?

등급에 영향을 미칩니다. 콘텐츠 보안 정책 검사는 채점되며 웹 보안 범주에서 최대 25점 가치가 있습니다.

개발자가 정책을 추가했는데 점수가 여전히 낮습니다 — 왜 그런가요?

정책이 존재해도 약할 수 있습니다. 가장 흔한 원인은 스크립트에 대한 'unsafe-inline'과 'unsafe-eval', 또는 와일드카드 소스(기본 *)입니다. 이들은 정책이 닫으려는 격차를 다시 엽니다.