`나 HTML 태그의 `onclick=\"...\"` 인라인 이벤트 핸들러의 실행을 허용합니다. 이는 해커가 게시판이나 댓글에 삽입한 악성 자바스크립트 코드까지 모두 실행을 허용한다는 뜻이므로 XSS 방어 효과가 크게 무력화됩니다."}},{"@type":"Question","name":"CSP를 잘못 설정해서 웹사이트 기능이 먹통이 되는 것을 방지하려면?","acceptedAnswer":{"@type":"Answer","text":"처음 정책을 도입할 때는 `Content-Security-Policy` 대신 `Content-Security-Policy-Report-Only` 헤더를 사용하세요. 이 모드에서는 브라우저가 리소스를 차단하지 않고 어떤 리소스가 정책을 위반했는지만 브라우저 콘솔이나 `report-to` 엔드포인트로 알려주므로 안전하게 디버깅할 수 있습니다."}},{"@type":"Question","name":"X-Frame-Options 헤더와 CSP의 frame-ancestors는 어떻게 다른가요?","acceptedAnswer":{"@type":"Answer","text":"`X-Frame-Options`는 과거에 만들어진 단순 헤더로 `DENY` 또는 `SAMEORIGIN`만 지정할 수 있어 특정 도메인만 선택적으로 허용하기 어려웠습니다. 반면 최신 W3C 표준인 CSP `frame-ancestors`는 여러 신뢰 도메인을 유연하게 화이트리스트할 수 있으며 최신 브라우저에서 X-Frame-Options보다 우선 적용됩니다."}},{"@type":"Question","name":"Next.js 프로젝트에서는 이 보안 헤더를 어디에 추가하나요?","acceptedAnswer":{"@type":"Answer","text":"프로젝트 루트의 `next.config.js` (또는 `next.config.ts`) 파일 내부에서 `async headers()` 함수를 선언하고, `source: '/:path*'` 경로에 대해 `Content-Security-Policy`를 비롯한 보안 헤더 객체 배열을 반환하도록 설정하면 모든 페이지에 자동 주입됩니다."}},{"@type":"Question","name":"HTML 태그로도 CSP를 설정할 수 있나요?","acceptedAnswer":{"@type":"Answer","text":"네, `` 형태로 HTML 헤더에 삽입할 수 있습니다. 단, W3C 스펙상 `frame-ancestors`, `report-uri`, `sandbox` 같은 일부 핵심 지침은 메타태그에서 지원되지 않으므로 가급적 서버 HTTP 응답 헤더로 전송하는 것이 권장됩니다."}},{"@type":"Question","name":"이 도구에서 설정한 도메인이나 키가 외부로 전송되나요?","acceptedAnswer":{"@type":"Answer","text":"전혀 전송되지 않습니다. 모든 CSP 정책 생성, 도메인 검증, Nginx/Apache/Next.js 설정 코드 직렬화는 100% 사용자의 웹 브라우저 로컬 자바스크립트 엔진 메모리 내에서 실행됩니다."}}]}

CSP 보안 헤더 및 웹 보안 설정 빌더

HOT

Content-Security-Policy(CSP), HSTS, X-Frame-Options 헤더를 체크박스로 조합해 Nginx/Next.js 설정 생성

ADVERTISEMENT · TOP BANNER

Responsive 728x90 / 320x100 Ad Slot

(CLS Prevention Active · Zero Shift)
100% 브라우저 연산 (서버 전송 없음, 개인정보 안전)
Interactive Client Mode
CSP & 웹 보안 헤더 설정 빌더
script-src & style-src
스크립트 허용 규칙 (script-src)
스타일시트 허용 규칙 (style-src)
img-src, connect-src & 보안 헤더 패키지
이미지 및 통신 허용
필수 동반 보안 헤더 (권장)
대상 서버 환경:
ADVERTISEMENT · HIGH CTR IN-FEED

Native In-Feed / High Viewability Ad Slot

(CLS Prevention Active · Zero Shift)

Content Security Policy(CSP)와 웹 애플리케이션 심층 방어 체계

콘텐츠 보안 정책(Content Security Policy, 이하 CSP)은 웹 브라우저가 신뢰할 수 있는 출처(Origin)에서 제공되는 리소스(스크립트, 스타일시트, 이미지, 폰트, API 연결 등)만 실행하거나 렌더링하도록 강제하는 강력한 W3C 표준 HTTP 응답 헤더(`Content-Security-Policy: ...`)입니다. 현대 웹 보안에서 악성 스크립트 삽입 공격인 XSS(Cross-Site Scripting), 패킷 가로채기, 데이터 유출(Data Exfiltration), 그리고 클릭재킹(Clickjacking)을 원천 차단하는 가장 효과적인 제1방어선으로 꼽힙니다.

웹 애플리케이션 개발 시 외부 분석 툴(Google Analytics, Google Tag Manager), 광고 스크립트(Google Adsense), 외부 CDN, 폰트(Google Fonts) 등 수십 개의 서드파티 스크립트를 통합하게 됩니다. 만약 CSP 헤더가 누락되어 있다면, 공격자가 악성 댓글이나 취약한 입력창을 통해 주입한 인라인 스크립트(`<script>evil()</script>`)가 피해자의 브라우저에서 무제한으로 실행되어 사용자 세션 쿠키, 로그인 토큰(JWT), 신용카드 정보를 해커의 외부 서버로 유출할 수 있습니다.

오르보킷 CSP 보안 헤더 빌더(CSP Security Header Builder)는 복잡하고 난해한 CSP Level 3 지침(default-src, script-src, style-src, connect-src 등)을 클릭 몇 번으로 조합해 줍니다. 'self', 구글 태그 매니저, 애드센스 등 자주 쓰이는 프리셋을 제공하며, HSTS, X-Frame-Options, X-Content-Type-Options 등 필수 보안 헤더를 함께 번들링하여 Nginx, Apache, Next.js 설정 코드로 1초 만에 변환해 줍니다.

CSP Level 3 정책 평가 모델 및 리소스 격리 메커니즘

지침(Directive)별 출처 화이트리스트 검증, 인라인 스크립트 차단, 프레이밍 방어 원리입니다.

CSP HTTP 헤더 평가 공식 및 구문 구조Mathematical Formulation
Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com; connect-src 'self' https://api.site.com;

각 지침은 세미콜론(;)으로 구분되며, 각 지침 내부의 허용 출처 도메인은 공백으로 나열합니다.

Google Analytics를 사용하는 Next.js 웹사이트의 CSP 구성
기본 출처 통제default-src 'self'동일 도메인만 허용
스크립트 허용 추가script-src 'self' https://www.googletagmanager.comGTM 스크립트 허용
API 통신 허용connect-src 'self' https://www.google-analytics.comGA 이벤트 전송 허용
클릭재킹 방어frame-ancestors 'none'타 사이트 iframe 삽입 차단

👉 구글 애널리틱스는 정상 작동하면서 악성 해커의 스크립트 실행과 데이터 유출은 완벽히 차단됩니다.

  • default-src 폴백 규칙: 개별 지침(script-src 등)이 명시되지 않았을 때 모든 리소스의 기본 허용 출처를 통제합니다.
  • script-src 격리 및 'unsafe-inline' 제거: 브라우저에서 인라인 `<script>`와 `eval()` 함수 실행을 차단하여 XSS 실행 벡터를 무력화합니다.
  • connect-src 네트워크 제어: `fetch()`, `XMLHttpRequest`, `WebSocket` 통신이 허용된 API 도메인으로만 패킷을 전송하도록 제한합니다.
  • frame-ancestors 클릭재킹 방어: 타 사이트가 내 웹 애플리케이션을 `<iframe>` 내부에 삽입하여 사용자의 클릭을 가로채는 것을 방지합니다.

핵심 CSP 지침(Directives) 및 보안 방어 규격표

CSP 지침 (Directive)통제 대상 리소스권장 기본값주요 보안 방어 효과권장 허용 도메인 예시
default-src모든 리소스의 기본 폴백(Fallback)'self'명시되지 않은 리소스의 무분별한 로딩 차단'self'
script-src자바스크립트 실행 코드 및 스크립트 파일'self'XSS 공격 및 악성 서드파티 스크립트 실행 원천 차단https://trusted.cdn.com
style-srcCSS 스타일시트 및 인라인 스타일'self' 'unsafe-inline'악성 스타일 인젝션 및 CSS 키로깅 차단https://fonts.googleapis.com
img-src이미지 파일 및 파비콘(Favicon)'self' data: https:가짜 이미지 태그를 통한 데이터 유출(Beacon) 방지https://images.unsplash.com
connect-srcfetch, XHR, WebSocket API 연결'self'공격자 C2 서버로의 탈취 데이터 전송 차단https://api.example.com
font-src웹 폰트(@font-face) 파일'self'비인가 폰트 파일 로딩 차단https://fonts.gstatic.com
frame-ancestors내 사이트를 삽입할 수 있는 상위 프레임'none'UI 클릭재킹(Clickjacking) 위조 공격 방어'self' (또는 'none')
ADVERTISEMENT · IN-ARTICLE CONTENT

High-Engagement In-Article Native Ad Slot

(CLS Prevention Active · Zero Shift)

사용 방법

11. 웹사이트 보안 레벨 및 지침(Directives) 선택

기본 출처(default-src 'self')를 바탕으로 script-src, style-src, img-src, connect-src 등 필요한 리소스 지침을 켭니다.

22. 신뢰할 수 있는 서드파티 도메인 체크

Google Analytics, Google Fonts, AdSense, Cloudflare CDN 등 사이트에서 실제 사용하는 신뢰 도메인 프리셋을 클릭합니다.

33. 추가 보안 헤더(HSTS, X-Frame-Options) 결합

Strict-Transport-Security(HTTPS 강제)와 X-Content-Type-Options(MIME 스니핑 방지)를 함께 활성화하여 보안을 극대화합니다.

44. Nginx, Apache, Next.js 설정 코드 복사

[Nginx 복사] 또는 [next.config.js 복사] 버튼을 눌러 웹 서버 환경설정에 바로 붙여넣을 수 있는 코드를 복사합니다.

실무에서의 CSP 보안 헤더 적용 시나리오

OWASP Top 10 보안 준수부터 금융권 컴플라이언스 대응까지 필수적입니다.

Next.js 15 + Google Tag Manager 배포

GTM 실행을 허용하면서 인라인 스크립트 주입을 억제하는 `script-src 'self' https://www.googletagmanager.com` 정책을 next.config.ts에 등록합니다.

핀테크/금융 서비스 클릭재킹 원천 차단

`frame-ancestors 'none'` 및 `X-Frame-Options: DENY`를 적용하여 타 사이트가 결제창을 iframe으로 낚아채는 공격을 차단합니다.

Nginx 리버스 프록시 보안 강화

nginx.conf의 server 블록에 단 한 줄의 `add_header Content-Security-Policy ...`를 삽입하여 보안 등급 A+를 달성합니다.

Report-Only 모드를 통한 무중단 사전 검증

서비스 장애 없이 브라우저 콘솔 및 원격 로깅 엔드포인트로 위반 사항만 먼저 모니터링하는 안전 적용을 수행합니다.

💡 CSP 구축 전문가 팁 & 무중단 배포 가이드

✓ 초기 배포 시에는 반드시 Report-Only 모드 사용

`Content-Security-Policy-Report-Only` 헤더를 사용하면 리소스를 실제로 차단하지 않고 위반 로그만 보고받을 수 있어 사이트 먹통 사고를 예방합니다.

✓ 'unsafe-inline' 제거와 Nonce(난수) 활용

인라인 스타일이나 스크립트 때문에 어쩔 수 없이 'unsafe-inline'을 쓰는 대신, 서버에서 요청마다 암호화 난수(Nonce)를 발행해 주입하세요.

✓ frame-ancestors와 X-Frame-Options의 조화

최신 브라우저는 CSP `frame-ancestors`를 우선하지만, 구형 레거시 브라우저를 위해 `X-Frame-Options: SAMEORIGIN`을 병행 전달하세요.

✓ HSTS preload 플래그 적용

`Strict-Transport-Security: max-age=31536000; includeSubDomains; preload`를 적용하여 첫 접속부터 HTTPS로만 통신하도록 강제하세요.

⚠️ 흔히 하는 실수 & 예방법

❌ default-src 'none' 설정 후 필수 지침 누락
✅ 모든 지침이 차단되어 CSS와 폰트가 로딩되지 않고 사이트 화면이 깨질 수 있으므로 점진적으로 출처를 화이트리스트하세요.
❌ connect-src에 API 도메인 누락
✅ Axios나 fetch() 통신이 브라우저에서 차단되어 로그인이나 결제 API 요청이 실패하지 않도록 API 엔드포인트를 확인하세요.
❌ HTTPS 도메인 대신 와일드카드(*) 사용
✅ `script-src *`는 CSP를 설정하지 않은 것과 다름없으므로 명시적인 프로토콜과 도메인을 기재하세요.
❌ 클라이언트 사이드 메타태그에 frame-ancestors 작성
✅ `<meta http-equiv="Content-Security-Policy">`는 `frame-ancestors`를 지원하지 않으므로 반드시 HTTP 응답 헤더로 전송해야 합니다.

자주 묻는 질문 (FAQ)

사용자 및 전문가들이 가장 자주 묻는 핵심 질문과 명확한 해답입니다.

6 Q&As

'unsafe-inline' 키워드는 HTML 문서 본문에 직접 작성된 `<script>...</script>`나 HTML 태그의 `onclick="..."` 인라인 이벤트 핸들러의 실행을 허용합니다. 이는 해커가 게시판이나 댓글에 삽입한 악성 자바스크립트 코드까지 모두 실행을 허용한다는 뜻이므로 XSS 방어 효과가 크게 무력화됩니다.

ADVERTISEMENT · FOOTER BANNER

Wide Responsive Banner

(CLS Prevention Active · Zero Shift)