반응형



CSP(Content Security Policy)는 한 줄로 말하면:
브라우저에게
"어떤 스크립트/리소스만 실행 허용할지"
정책을 내려주는 보안 기능
이다.
왜 필요하냐?
핵심 목적은:
XSS 공격 방어
다.
XSS 문제
예를 들어 게시판에 공격자가:
<script>
stealCookie()
</script>
삽입했다고 하자.
브라우저는 기본적으로
HTML 안 script 실행
한다.
즉 악성 JS 실행 가능.
CSP 등장
서버가 브라우저에 말함:
"우리 사이트는
이 JS만 실행 가능"
즉 브라우저 자체가 차단
허용되지 않은 script 실행 금지
한다.
어떻게 설정하나?
보통 HTTP Header 사용.
예:
Content-Security-Policy:
default-src 'self';
의미
현재 도메인(self) 리소스만 허용
대표 정책들
| 정책 | 의미 |
| default-src | 기본 리소스 정책 |
| script-src | JS 허용 정책 |
| style-src | CSS 허용 정책 |
| img-src | 이미지 허용 정책 |
| connect-src | API 요청 허용 |
| frame-src | iframe 허용 |
가장 중요한 script-src
예:
Content-Security-Policy:
script-src 'self'
의미
우리 사이트 JS만 실행 가능
그래서 막을 수 있는 것
공격자가:
<script src="https://evil.com/hack.js">
삽입해도:
브라우저 차단
한다.
inline script도 차단 가능
예:
<script>alert(1)</script>
CSP가 엄격하면
inline script 금지
가능.
왜 중요하냐?
XSS는:
브라우저에서 JS 실행
이 핵심.
즉 JS 실행 자체를 제한하면 강력한 방어 가능.
실무에서 가장 많이 쓰는 구조
예:
Content-Security-Policy:
default-src 'self';
script-src 'self' https://cdn.jsdelivr.net;
img-src 'self' data:;
의미
script-src
우리 서버 + jsdelivr CDN만 허용
img-src
data: base64 이미지 허용
'self' 의미
현재 사이트 도메인.
예:
https://myservice.com
nonce/hash도 중요
현대 CSP 핵심.
nonce 방식
서버가 매 요청마다 랜덤값 생성.
예:
Content-Security-Policy:
script-src 'nonce-abc123'
HTML에서도
<script nonce="abc123">
즉:
서버가 승인한 script만 실행
가능.
hash 방식
특정 script 내용 hash 허용.
예:
script-src 'sha256-xxxxx'
CSP가 막는 대표 공격
| 공격 | 방어 |
| Inline XSS | O |
| 외부 악성 JS | O |
| 데이터 유출 script | O |
| iframe 삽입 일부 | O |
하지만 CSP 만능 아님
중요.
못 막는 경우도 있음
예:
이미 허용된 JS 내부 취약점
예시
정상 JS 코드가:
eval(userInput)
같은 위험 코드 쓰면 문제 가능.
그래서 CSP는 "추가 방어"
Defense in Depth.
즉:
XSS 방어 최종 안전망
느낌.
React/Vue는 CSP 적용 쉬운 편
왜냐면:
inline script 적음
반대로 레거시 JSP는 어려움
이유:
onclick=""
inline script
eval
많기 때문.
unsafe-inline
이 옵션 엄청 중요.
예:
script-src 'unsafe-inline'
의미
inline script 허용
그런데 이러면 CSP 효과 감소
가능하면 제거 권장.
Spring Security 설정
예:
http.headers(headers ->
headers.contentSecurityPolicy(
csp -> csp.policyDirectives(
"default-src 'self'; script-src 'self'"
)
)
);
Report-Only 모드도 존재
엄청 유용.
예:
Content-Security-Policy-Report-Only
의미
차단은 안 하고
위반 로그만 수집
운영 적용 전에 많이 사용.
실무 핵심 포인트
1. CSP는 XSS 피해 감소 핵심
2. inline script 제거 중요
3. CDN 허용 최소화
4. nonce 기반 추천
현대 표준.
핵심 한 줄
CSP는:
브라우저에게
"어떤 JavaScript·CSS·이미지·API만 허용할지"
정책을 내려서,
XSS 같은 악성 코드 실행을 제한하는 웹 보안 메커니즘
이다.
반응형
'system_fundamentals > security_cryptography' 카테고리의 다른 글
| CORS (0) | 2026.05.19 |
|---|---|
| SameSite Cookie (0) | 2026.05.19 |
| SQL Injection (0) | 2026.05.19 |
| CSRF (0) | 2026.05.19 |
| XSS (0) | 2026.05.19 |
댓글