📌 핵심 요약
- CSP: 브라우저가 신뢰할 수 있는 리소스(스크립트, 스타일, 이미지 등)의 출처를 명시적으로 선언하여, 승인되지 않은 악성 스크립트 실행을 차단하는 보안 계층입니다.
- 설정 목적: XSS 공격자가 주입한 악성 스크립트 실행을 방지하고, 클릭재킹이나 패킷 스니핑과 같은 공격의 피해를 최소화합니다.
- 동작 방식: HTTP 응답 헤더나 <meta> 태그를 통해 정책을 전달하며, 정책을 위반하는 리소스 로드는 브라우저 단에서 즉시 차단됩니다.
💬 실제 면접 답변 예시 "CSP는 현대 웹 애플리케이션 보안의 핵심적인 방어선입니다. 개발자가 예측하지 못한 경로로 악성 스크립트가 주입되더라도, CSP가 설정되어 있다면 브라우저는 허용되지 않은 도메인의 스크립트 실행을 거부합니다.
실무에서는 보통 script-src 'self' https://trusted.com과 같이 신뢰하는 도메인만 허용하는 정책을 적용합니다. 특히 인라인 스크립트(inline script) 사용을 금지하고, 불가피한 경우 nonce(일회용 랜덤값)나 hash를 사용하여 검증된 스크립트만 실행되도록 관리합니다. 저는 보안 강화를 위해 처음부터 엄격한 정책을 적용하기보다, Content-Security-Policy-Report-Only 모드를 활용해 서비스 영향도를 먼저 파악하고 점진적으로 정책을 고도화한 경험이 있습니다."
💡 실무 팁 & 주의점
- Tip: 대기업 면접에서는 'Defense in Depth(계층적 방어)' 관점을 강조하세요. "CSP가 XSS의 완전한 해결책은 아니므로, 항상 서버 측 입력값 검증 및 출력값 에스케이핑(Escaping)과 병행해야 한다"는 답변은 보안에 대한 깊은 이해도를 보여줍니다.
- 주의점: unsafe-inline이나 unsafe-eval 설정은 CSP의 보안 효과를 무력화하므로 가급적 피해야 합니다. 또한 구형 브라우저에서는 CSP를 지원하지 않을 수 있으므로, 브라우저 호환성을 항상 체크해야 합니다.