본문으로 건너뛰기

CSP 정책 생성

CSP Builder

안내 양식이나 위반 리포트를 바탕으로 CSP를 만들고 각 지시어의 의미를 설명합니다.

Content-Security-Policy는 XSS 취약점을 침해가 아니라 콘솔에 찍힌 차단 메시지로 바꾸는 헤더이자, 아무 효과 없는 형태로 배포되는 일이 가장 잦은 헤더이기도 합니다. 이 도구는 지시어를 하나씩 세우면서 각각이 실제로 무엇을 막는지 설명합니다.

🔒 브라우저 안에서만 처리cspheaderswebgenerator
기존 정책 불러오기

따로 지정하지 않은 모든 가져오기 지시어의 기본값입니다.

스크립트를 어디서 불러올 수 있는지. XSS를 실제로 막는 지시어입니다.

스타일시트를 어디서 불러올 수 있는지.

이미지를 어디서 불러올 수 있는지.

글꼴을 어디서 불러올 수 있는지.

fetch·XHR·WebSocket·EventSource가 어디로 연결할 수 있는지.

<audio>와 <video>를 어디서 불러올 수 있는지.

<object>/<embed>를 어디서 불러올 수 있는지. 보통 'none'이 낫습니다.

<iframe> 문서를 어디서 불러올 수 있는지.

누가 이 페이지를 프레임에 넣을 수 있는지. X-Frame-Options를 대체합니다.

<base href>에 무엇을 넣을 수 있는지. 'self'나 'none'으로 제한하십시오.

폼이 어디로 전송될 수 있는지.

Worker·SharedWorker·서비스 워커를 어디서 불러올 수 있는지.

웹 앱 매니페스트를 어디서 불러올 수 있는지.

http:// 하위 자원 요청을 https://로 바꿔서 보냅니다.

http:// 하위 자원을 아예 차단합니다(구형).

  • ⚠ frame-ancestors가 없습니다. 누가 이 페이지를 프레임에 넣을 수 있는지 정하려면 'none'이나 'self'로 추가하십시오.
  • ⚠ base-uri가 없습니다. <base> 태그 주입을 막으려면 base-uri 'self'를 추가하십시오.

Content-Security-Policy

default-src 'self'; script-src 'self'

사용 방법

  1. 양식이나 위반 리포트에서 시작합니다

    안내 양식은 스크립트·스타일·이미지·연결이 어디서 오는지 묻습니다. 위반 리포트가 이미 있다면 붙여 넣으십시오. 실제로 불러온 것에서 출처를 뽑아냅니다.

  2. 먼저 report-only로 배포합니다

    `Content-Security-Policy-Report-Only`는 차단하지 않고 위반만 기록합니다. 일주일쯤 돌려 보면 아무도 기억하지 못하던 외부 삽입 요소가 리포트에 나타납니다.

  3. `unsafe-inline`은 마지막에 제대로 없앱니다

    `script-src 'unsafe-inline'`이 들어간 정책은 사실상 아무것도 막지 못합니다. 응답마다 다른 nonce나 인라인 블록의 해시로 바꾸십시오. 두 형태 모두 만들어 줍니다.

자주 묻는 질문

이 도구가 사이트를 검사하나요?

아니요. 입력한 내용으로 정책을 만들고 설명할 뿐입니다. 실제 사이트가 지금 무엇을 보내는지 확인하는 것은 보안 헤더 점검 도구의 일입니다.

왜 인라인 스크립트가 계속 허용되나요?

같은 지시어에 `unsafe-inline`이 함께 있으면 하위 호환을 위해 nonce나 해시가 무시됩니다. 둘을 같이 둘 수 없고, 느슨한 쪽이 이깁니다.

`default-src 'self'` 하나면 충분한가요?

기본으로는 좋지만 여기에 기대지 않는 지시어가 있습니다. `frame-ancestors`·`form-action`·`base-uri` 같은 것들입니다. 명시적으로 지정해야 하고, 이 도구가 그렇게 만들어 줍니다.

이 도구로 이어지는 것

다음 단계

이 도구의 결과를 그대로 받을 수 있는 도구들입니다.