CSP 헤더 분석기 | Content Security Policy 검토

보안브라우저에서 실행(업로드 없음)

Content-Security-Policy 필드 하나나 정책 값 하나를 붙여넣어 쉼표로 구분된 여러 정책, 정책별 첫 유효 directive, source expression, Report-Only 상태와 문맥별 점검 결과를 확인합니다. 분석은 브라우저에서만 실행되고 URL을 가져오지 않으며, nonce·hash·strict-dynamic 때문에 효력이 없는 unsafe-inline과 실제로 허용되는 경우를 구분합니다.

다음에 할 작업

관련 작업 흐름을 이어가거나 이 작업 다음에 자주 사용하는 도구를 열어보세요.

이 도구 사용 방법

배포된 응답에서 Content-Security-Policy 또는 Content-Security-Policy-Report-Only 필드 하나를 정확히 복사합니다. 정책 값만 넣을 수도 있지만 이 경우 시행 여부는 알 수 없습니다.

쿠키, Authorization 값, 서명된 report URL과 관련 없는 헤더는 붙여넣기 전에 제거합니다. 응답 전체는 보안 헤더 확인기를 사용합니다.

분석을 실행하고 헤더 시행 상태, 정책 수, 인식된 directive, 알 수 없는 directive와 source expression 수를 확인합니다.

정책별 중복 directive를 검토합니다. 브라우저는 한 정책에서 같은 이름의 첫 directive를 사용하므로 뒤에 나온 값이 앞의 값을 덮지 않습니다.

시행 정책의 고위험 결과부터 해결한 뒤 Report-Only 경고, 레거시 directive, 다른 source와 섞인 'none', 잘못된 source와 fallback을 살펴봅니다.

정규화된 보고서를 복사하거나 다운로드하고 실제 페이지 동작과 위반 보고서를 시험한 뒤 CDN·프록시 변경 후 배포 헤더를 다시 확인합니다.

이 도구를 써야 할 때

시행 정책과 Report-Only 출시 비교

후보 정책을 시행하기 전에 복사한 필드가 리소스를 실제 차단하는지 위반만 보고하는지 구분합니다.

중복 directive 동작 조사

템플릿, 미들웨어, 리버스 프록시나 CDN이 같은 directive를 다시 붙였을 때 어떤 첫 값이 실제로 남는지 확인합니다.

nonce와 strict-dynamic 호환성 검토

nonce·hash·strict-dynamic 신뢰가 있을 때 최신 CSP 처리에서 무시되는 unsafe-inline과 실제 활성 값을 구분합니다.

브라우저 위반 보고서 추적

차단된 스크립트, API 요청, 이미지, 프레임, 폼 제출을 연결하기 전에 fetch·document·navigation·reporting directive를 분류합니다.

반복 가능한 출시 검토 자료 작성

제한된 정책을 안정적인 보고서로 정리해 PR, 장애 기록, 배포 체크리스트와 변경 전후 비교에 사용합니다.

흔한 실수

뒤의 중복 값을 override로 오해하기

정책 하나에서는 같은 이름의 첫 directive가 유효하고 뒤의 중복은 무시됩니다. 마지막 값처럼 보이는 문구를 믿지 말고 헤더 생성 경로를 수정해야 합니다.

모든 unsafe-inline을 활성으로 계산하기

유효한 source list의 nonce, hash 또는 strict-dynamic은 최신 CSP 처리에서 unsafe-inline을 무효화할 수 있습니다. 토큰 개수만 세지 말고 호환성 문맥을 봐야 합니다.

Report-Only가 페이지를 보호한다고 가정하기

Content-Security-Policy-Report-Only는 위반을 기록하지만 차단을 시행하지 않습니다. 같은 source라도 운영상 결과가 다릅니다.

여러 정책을 선택지로 읽기

쉼표로 구분되거나 반복된 시행 정책은 함께 적용됩니다. 요청은 모든 시행 정책을 통과해야 하므로 뒤의 정책이 앞 정책을 느슨하게 만들 수 없습니다.

실제 페이지 시험 없이 헤더만 편집하기

정적 검토는 런타임 nonce·hash, redirect, 삽입 markup, worker, 브라우저 지원과 모든 경로 의존성을 알 수 없습니다. 배포된 앱과 위반 보고를 시험해야 합니다.

예시

nonce 기반 시행 정책 검토

예시 nonce를 운영 환경에 복사하지 말고 응답마다 새 값을 생성해야 합니다. 분석기는 토큰을 읽을 뿐 nonce 생성이나 markup 일치를 검증하지 못합니다.

입력
Content-Security-Policy: default-src 'self'; script-src 'nonce-AbCd12_-' 'strict-dynamic'; style-src 'self'; img-src 'self' https: data:; connect-src 'self' https://api.example.com; object-src 'none'; base-uri 'none'; frame-ancestors 'none'; report-to csp-endpoint
출력
인식된 fetch·document·navigation·reporting directive가 있는 시행 정책입니다. img-src의 data:는 정보로 표시되고 활성 고위험 script source는 보고되지 않습니다.

Report-Only와 시행 구분

후보 위반을 관찰하는 데는 유용하지만 이 필드는 표시된 inline 동작을 실제로 차단하지 않습니다.

입력
Content-Security-Policy-Report-Only: default-src 'self'; script-src 'unsafe-inline' https://cdn.example.com; report-uri https://reports.example.com/csp
출력
Report-Only 상태, 후보 unsafe-inline 경고, 폐기 예정 report-uri 호환성 안내가 표시되며 시행 고위험 개수에는 포함되지 않습니다.

두 정책과 first-wins 중복 확인

한 정책 안의 중복과 다른 정책에 같은 directive가 있는 경우는 다릅니다. 다른 정책의 값은 추가 제한으로 적용됩니다.

입력
Content-Security-Policy: default-src 'self'; script-src 'self'; script-src *, connect-src 'none'
출력
함께 적용되는 시행 정책 두 개입니다. 정책 1은 첫 script-src 'self'를 사용하고 뒤의 wildcard 중복을 무시하며, 정책 2는 별도로 연결을 차단합니다.

CSP 검토 계산 방식

파서는 CSP Level 3의 직렬화 구조를 따릅니다. 쉼표는 정책, 세미콜론은 directive를 구분하고 이름은 ASCII 대소문자를 구분하지 않으며 빈 세미콜론 구간은 무시합니다.

각 정책에서는 같은 이름의 첫 directive만 유지하고 뒤의 항목을 무시된 중복으로 보고합니다. 다른 정책의 같은 directive는 정책이 누적 적용되므로 중복이 아닙니다.

형식이 맞지만 알 수 없는 directive 이름은 조용히 삭제하지 않고 표시합니다. 오타를 찾되 확장 또는 새 사양이 모든 브라우저에서 미지원이라고 단정하지 않기 위한 처리입니다.

source 검사는 directive 문맥을 반영합니다. wildcard, data:, blob:, 일반 HTTP, unsafe-eval과 unsafe-inline은 script·image·worker·object·fallback에서 같은 위험도로 계산되지 않습니다.

관련 inline 검사에서는 nonce나 hash가 있으면 unsafe-inline이 효력을 잃고, strict-dynamic도 최신 script 처리 방식을 바꿉니다. 구형 브라우저의 fallback 해석이 가능한 경우에는 호환성 경고를 남깁니다.

입력은 UTF-8 바이트, 줄 수와 줄 크기, 정책·directive·source 수로 제한됩니다. 도구는 붙여넣은 텍스트를 로컬에서 분석할 뿐 URL을 가져오거나 정책을 실행·시행·인증하지 않습니다.

자주 묻는 질문

이 결과로 CSP가 안전하다고 증명할 수 있나요?

아니요. 붙여넣은 필드 하나를 파싱하고 검토합니다. 모든 브라우저 버전, 런타임 nonce, 삽입 요소, 경로 의존성, 서버 동작이나 앱 취약점을 모델링하지 못합니다.

unsafe-inline이 가끔 무시됨으로 표시되는 이유는 무엇인가요?

같은 유효 source list에 nonce나 hash가 있으면 CSP inline 매칭은 모든 inline 동작을 허용하지 않습니다. script에서는 strict-dynamic도 최신 처리에서 unsafe-inline을 무효화할 수 있습니다.

중복 CSP directive 중 어떤 값이 유효한가요?

한 정책 안에서는 같은 이름의 첫 directive가 사용되고 뒤의 중복은 무시됩니다. 별도 정책에 있는 directive는 누적되는 별도 제한으로 계속 적용됩니다.

정책 값만 넣으면 시행 상태를 알 수 없다고 나오는 이유는 무엇인가요?

필드 이름이 없으면 Content-Security-Policy인지 Content-Security-Policy-Report-Only인지 구분할 수 없습니다. 차단 여부가 중요하면 전체 필드를 붙여넣으세요.

curl 응답 전체를 붙여넣을 수 있나요?

요청·응답 전체는 보안 헤더 확인기나 HTTP 헤더 파서를 사용하세요. 이 도구는 CSP 필드 하나 또는 직렬화된 정책 목록 값 하나만 분석합니다.

default-src가 없으면 항상 안전하지 않은 정책인가요?

아닙니다. default-src는 fetch fallback이지 모든 정책의 필수 조건은 아닙니다. 앱이 쓰는 리소스 종류를 명시적 directive가 모두 다루는지 확인할 수 있도록 부재를 문맥 정보로 표시합니다.

붙여넣은 정책이 서버로 전송되나요?

분석과 보고서 생성은 브라우저에서 이루어집니다. 그래도 서명된 report endpoint, 내부 hostname과 공유할 필요가 없는 비밀값은 붙여넣거나 내보내기 전에 제거하세요.

이 도구를 검증한 방법

관리 및 검수 검토일

검증 방법: “image data:를 script 위험으로 오해하지 않고 nonce 정책 검토” 문서 입력을 CSP 헤더 분석기에 그대로 넣었습니다. 수행 순서는 “공유 전 캡처 최소화”, “유효 문맥에서 source 해석”였고 브라우저 결과를 예시 출력과 대조했습니다. 실패 경계는 “엣지가 아닌 origin 응답 검토”, “무시되는 중복 편집” 두 항목으로 나눠 검토했습니다.

기대 결과: 파서는 nonce와 'strict-dynamic'의 관계를 유지했고 고위험 항목은 0건으로 판정했으며, img-src data:는 스크립트 위험이 아니라 이미지 동작에 따라 정당화할 검토 항목으로 표시했습니다.

공식 출처와 표준

검증한 작업 가이드 열기

관련 작업 가이드

도구를 열기 전에 자주 쓰는 작업 흐름과 예시를 확인하세요.

관련 도구

관리 중인 다른 작업 흐름을 이어서 사용해 보세요

모든 도구 둘러보기