![[보안] CSP(Content Security Policy)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5q8S7%2FbtsOfAZCBLb%2FuHqcyZN67XKdfFx3q5vOjk%2Fimg.png)
[보안] CSP(Content Security Policy)네트워크/보안2025. 5. 28. 11:44
Table of Contents
CSP(Content Security Policy)는 웹 보안 기능 중 하나로, 웹사이트에서 실행될 수 있는 콘텐츠의 출처를 명시적으로 제한하여 악성 스크립트 실행(XSS)을 방지하는 정책이다.
쉽게 말하면, "어디서 온 콘텐츠만 허용할지"를 웹 브라우저에게 미리 알려주는 보안 지침이다.
필요 이유
- 웹사이트가 XSS(크로스 사이트 스크립팅) 공격을 받으면 악성 JavaScript가 삽입되어, 사용자 쿠키 탈취, 악성 행위 수행, 세션 탈취 등이 일어날 수 있다.
- CSP는 이런 스크립트 실행을 "출처 기준으로 필터링" 하여 예방한다.
주요 지시어
디렉티브 | 설명 | 예시 |
default-src | 기본 출처 정책 | 'self' (현재 도메인만 허용) |
script-src | 자바스크립트의 출처 제한 | 'self' https://trusted.cdn.com |
style-src | CSS의 출처 제한 | 'self' 'unsafe-inline' |
img-src | 이미지의 출처 제한 | 'self' data: https: |
object-src | 플래시/오브젝트 출처 제한 | 'none' (아예 허용 안함) |
frame-ancestors | 이 사이트를 iframe으로 삽입 가능한 출처 제한 | 'none' 또는 'self' |
base-uri | <base> 태그 제한 | 'self' (현재 origin만 기준 URL로 허용) |
스프링 시큐리티
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
// 보안 헤더 설정
.headers(headers -> headers
.contentSecurityPolicy(csp -> csp.policyDirectives(
"default-src 'self'; " +
"script-src 'self'; " + // JS는 자기 도메인만 허용 (인라인 JS 금지)
"style-src 'self' 'unsafe-inline'; " + // CSS는 인라인 허용
"object-src 'none'; base-uri 'self';" )
)
.frameOptions(HeadersConfigurer.FrameOptionsConfig::sameOrigin) // iframe으로 삽입 방지
)
nginx 설정
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; frame-ancestors 'none';" always; |
nginx에서 보안헤더 설정
Spring Security에서 설정한 CSP 헤더는 브라우저에 도달하지 않거나, nginx 설정에 의해 덮어쓰기(overwrite)되므로 무시된다.
HTTP 응답 헤더는 동일한 헤더 키에 대해 마지막으로 설정된 값만 유효하다.
스프링에서 nginx를 겨쳐서 응답이 나가기 때문에 nginx에서 설정한 헤더로 덮어씌워진다.
'네트워크 > 보안' 카테고리의 다른 글
[보안] CSRF(Cross-Site Request Forgery, 사이트 간 요청 위조) (0) | 2025.05.28 |
---|---|
[보안] SOP와 CORS (0) | 2025.05.27 |
[보안] JWT(Json Web Token) (0) | 2025.05.27 |