콘텐츠 보안 정책
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
콘텐츠 보안 정책(CSP)은 웹 사이트에서 발생하는 크로스 사이트 스크립팅(XSS) 공격과 데이터 주입 공격을 완화하기 위한 웹 브라우저 보안 기능이다. 2004년 처음 제안되어 파이어폭스 4에 처음 구현되었으며, W3C에서 CSP 버전 1과 2를 발표했고 현재 레벨 3 초안이 개발 중이다. CSP는 웹 서버 응답 헤더에 `Content-Security-Policy`를 포함시켜 선언적 허용 목록 정책을 적용하며, 인라인 JavaScript, CSS, 동적 코드 평가 등을 기본적으로 비활성화한다. 브라우저는 정책 위반 시 보고서를 전송하며, 알려진 우회 방법과 보완적인 보안 조치들이 존재한다. 초기 CSP는 브라우저 확장 기능의 작동을 방해하지 않았으나, CSP 1.1부터는 정책 시행을 수정하거나 우회할 수 있도록 변경되었다.
더 읽어볼만한 페이지
- 컴퓨터 보안 표준 - ISO/IEC 27002
ISO/IEC 27002는 조직이 정보 보안을 효과적으로 관리하도록 지침을 제공하는 정보 보안 표준으로, 정보 보안 정책, 조직 구조, 물리적 보안 등 다양한 영역을 다룬다. - 컴퓨터 보안 표준 - IEEE 802.10
- 웹 취약점 공격 - 보안 취약점
보안 취약점은 시스템의 설계, 구현, 운영, 관리상 결함이나 약점으로, 위협에 의해 악용되어 시스템 보안 정책을 위반할 수 있는 요소이며, ISO 27005, IETF RFC 4949, NIST SP 800-30, ENISA 등 다양한 기관에서 정의하고 있다. - 웹 취약점 공격 - 인터넷 보안
인터넷 보안은 사이버 위협, 악성 소프트웨어, 서비스 거부 공격 등으로부터 정보와 시스템을 보호하기 위해 네트워크 계층 보안, 다단계 인증, 방화벽 등 다양한 기술과 방법을 포괄한다. - 웹 애플리케이션 - 구글 포토
구글 포토는 사진 및 동영상 저장, 공유, 관리 기능을 제공하는 구글의 클라우드 기반 서비스로, 자동 분류, 얼굴 인식, 검색 기능을 제공하지만 2021년부터 무료 무제한 저장 용량 제공 정책이 변경되었고, 2024년에는 기술의 군사적 이용에 대한 윤리적 논란이 있었다. - 웹 애플리케이션 - 전자 상거래
전자상거래는 컴퓨터 네트워크를 이용하여 상품이나 서비스를 사고파는 행위로, 웹, 이메일 등 다양한 전자적 매체를 통해 이루어지며, 소비자에게 편리함을, 기업에게는 시장 확장 기회를 제공하는 경제 활동이다.
콘텐츠 보안 정책 | |
---|---|
개요 | |
유형 | 컴퓨터 보안 표준 |
목적 | 크로스 사이트 스크립팅 (XSS) 공격 및 데이터 삽입 공격 완화 및 탐지 |
개발 | 웹 애플리케이션 보안 포럼 |
최신 버전 | 레벨 3 |
표준 | W3C 권고안 |
콘텐츠 보안 정책 (CSP) | |
설명 | 크로스 사이트 스크립팅 (XSS)을 비롯한 특정 유형의 웹 공격을 탐지하고 완화하는 데 도움이 되는 컴퓨터 보안 표준 |
작동 방식 | 웹 사이트의 콘텐츠가 상호 작용하는 방식을 제어하는 보안 정책을 지정하여 작동함. |
목표 | XSS 공격 및 데이터 삽입 공격과 같은 위협을 줄이는 것 |
적용 대상 | 웹 디자이너 또는 서버 관리자가 웹 사이트에서 콘텐츠가 상호 작용하는 방식을 지정하는 데 도움이 됨. |
기능 | 허용 가능한 콘텐츠 소스 제한 인라인 자바스크립트 실행 차단 eval() 함수 사용 금지 자원 로드 위치 제한 |
이점 | XSS 공격 위험 감소 데이터 무결성 향상 사용자 신뢰도 향상 |
단점 | 초기 구성 복잡성 기존 웹 사이트와의 호환성 문제 발생 가능성 정책 위반으로 인한 기능 제한 가능성 |
구현 | HTTP 응답 헤더를 통해 정책 정의 HTML 메타 태그를 통해 정책 정의 |
지시문 | `default-src`: 기본 콘텐츠 소스 지정 `script-src`: 자바스크립트 소스 지정 `style-src`: 스타일 시트 소스 지정 `img-src`: 이미지 소스 지정 `connect-src`: 연결 (예: XMLHttpRequest, WebSocket) 소스 지정 `font-src`: 글꼴 소스 지정 `object-src`: 플러그인 (예: |
예시 | `Content-Security-Policy: default-src 'self'` (동일 출처 콘텐츠만 허용) `Content-Security-Policy: script-src 'self' https://example.com` (동일 출처 및 example.com의 스크립트 허용) `Content-Security-Policy: default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self'; style-src 'self';` (기본적으로 모든 콘텐츠 차단, 스크립트, 연결, 이미지, 스타일만 허용) |
참고 자료 | W3C Content Security Policy Level 3 MDN Web Docs: Content Security Policy (CSP) CSP Evaluator (CSP 정책 평가 도구) |
2. 현황
웹사이트는 여러 개의 CSP 헤더를 선언할 수 있으며, 강제 및 보고 전용을 섞을 수도 있다. 각 헤더는 브라우저에 의해 개별적으로 처리된다.
CSP는 HTML 메타 태그를 사용하여 HTML 코드 안에 선언할 수 있으나, 이 경우 효율성은 제한을 받는다.[50]
2. 1. 표준화 과정
이 표준은 원래 콘텐츠 제한(Content Restrictions)으로 명명되었으며, 2004년 로버트 한센에 의해 제안되었다.[40] 파이어폭스 4에 처음 구현되었고 이후 빠르게 다른 브라우저들에도 도입되었다. 이 표준의 버전 1은 2012년 W3C 후보 권고안으로 출판되었으며[41] 2014년 빠르게 차기 버전(레벨 2)이 등장하였다. 2015년 기준으로 레벨 3 초안이 개발되고 있으며, 새 기능들이 웹 브라우저에 빠르게 채택되고 있다.[42]실험적인 CSP 구현체들 중 일부는 다음의 헤더 이름들을 사용하고 있다:[43]
- `Content-Security-Policy` – W3C 문서가 제안한 표준 헤더 이름. 구글 크롬은 버전 25 기준으로 이것을 지원한다.[44] 파이어폭스는 버전 23 기준으로 이것을 지원한다.[45](2013년 8월 6일 출시)[46] 웹킷은 버전 528(나이틀리 빌드) 기준으로 이것을 지원한다.[47]
- `X-WebKit-CSP` – 구식. 실험적인 헤더이며 구글 크롬 및 기타 웹킷 기반 브라우저(사파리)에 2011년 도입되었다.[48]
- `X-Content-Security-Policy` – 구식. 실험적인 헤더이며 게코 2 기반 브라우저(파이어폭스 4 ~ 파이어폭스 22, 선더버드 3.3, 씨몽키 2.1)에 도입되었다.[49]
2. 2. 브라우저 지원
파이어폭스 4에서 처음 구현된 이후, 구글 크롬, 사파리, 마이크로소프트 엣지 등 주요 웹 브라우저들이 CSP를 지원하고 있다.[40] 실험적인 CSP 구현을 위해 사용되는 헤더 이름은 다음과 같다:[43]- `Content-Security-Policy` – W3C 문서가 제안한 표준 헤더 이름이다. 구글 크롬은 버전 25 기준으로, 파이어폭스는 버전 23 기준으로, 웹킷은 버전 528(나이틀리 빌드) 기준으로 이것을 지원한다.[44] [45] [47]
- `X-WebKit-CSP` – 구식. 실험적인 헤더이며 구글 크롬 및 기타 웹킷 기반 브라우저(사파리)에 2011년 도입되었다.[48]
- `X-Content-Security-Policy` – 구식. 실험적인 헤더이며 게코 2 기반 브라우저(파이어폭스 4 ~ 파이어폭스 22, 선더버드 3.3, 씨몽키 2.1)에 도입되었다.[49]
인터넷 익스플로러 10과 인터넷 익스플로러 11 또한 CSP를 지원하지만 실험적인 `X-Content-Security-Policy` 헤더를 이용한 샌드박스 디렉티브로만 지원한다.[51]
2. 3. 웹 애플리케이션 프레임워크 지원
AngularJS는 네이티브로,[52] 장고는 미들웨어를 통해[53] CSP를 지원하는 등, 수많은 웹 애플리케이션 프레임워크들이 CSP를 지원한다. 루비 온 레일즈를 위한 지침들은 깃허브에 게시되었다.[54] 그러나 웹 프레임워크 지원은 CSP 콘텐츠가 웹 애플리케이션의 상태에 어느 정도 의존하는 경우(예: `nonce` 오리진 사용)에만 필요하다. 그 밖의 경우 CSP는 정적이며, 부하분산이나 웹 서버 등 애플리케이션보다 더 높은 웹 애플리케이션 티어로부터 전달될 수 있다.3. 작동 방식
`Content-Security-Policy` 헤더가 서버 응답에 포함되면, 이를 준수하는 클라이언트는 선언적 허용 목록 정책을 적용한다. 이 정책은 크로스 사이트 스크립팅 공격을 방지하기 위해 JavaScript 실행을 엄격하게 제한한다.[23]
CSP는 새로운 애플리케이션에서 사용하기 쉽지만, 기존 애플리케이션에서는 코드 수정이나 정책 완화가 필요할 수 있다. CSP 호환 웹 애플리케이션에서는 외부 소스 파일(`<script src>`)에서 코드를 로드하고, JSON을 구문 분석하며, `EventTarget.addEventListener()`를 사용하여 이벤트 처리기를 설정하는 것이 권장된다.[23]
3. 1. 주요 기능
Content-Security-Policy
헤더가 서버 응답에 있는 경우, 이를 준수하는 클라이언트는 선언적 허용 목록 정책을 적용한다. 이 정책의 한 예로 특정 크로스 사이트 스크립팅 공격을 방지하기 위해 JavaScript를 더 엄격하게 실행하는 모드가 있다. 실제로 이는 기본적으로 여러 기능이 비활성화됨을 의미한다.[23]- 인라인 JavaScript 코드
- *
<script>
블록 - * DOM 이벤트 처리기 (예:
onclick
) - *
javascript:
링크 - 인라인 CSS 문
- *
<style>
블록 - * HTML 요소에 속성을 부여한
style
- 동적 JavaScript 코드 평가
- *
eval()
- *
setTimeout
및setInterval
함수에 대한 문자열 인수 - *
new Function()
생성자 - 동적 CSS 문
- *
CSSStyleSheet.insertRule()
메서드
4. 보고 기능
콘텐츠 보안 정책(CSP)은 정책 위반 시 브라우저가 지정된 URL로 보고서를 전송하는 기능을 제공하여, 웹 관리자가 잠재적인 보안 위협을 감지하고 대응할 수 있도록 돕는다.
4. 1. 보고서 전송 방식
정책을 위반하는 리소스 요청이나 스크립트 실행이 발생할 때마다, 브라우저는 위반 사항에 대한 세부 정보를 담아 POST 요청을 `report-uri`[24] 또는 `report-to`[25]에 지정된 값으로 전송한다.CSP 보고서는 표준 JSON 구조이며 애플리케이션 자체의 API[26] 또는 공용 CSP 보고 수신기를 통해 캡처될 수 있다.
2018년에 보안 연구원들은 `report-uri`에 지정된 수신자에게 잘못된 긍정 보고서를 보내는 방법을 보여주었다. 이를 통해 잠재적인 공격자는 해당 알람을 임의로 트리거할 수 있으며, 실제 공격의 경우 알람의 유용성이 떨어질 수 있다.[27] 이 동작은 의도된 것이며 브라우저(클라이언트)가 보고서를 보내기 때문에 수정할 수 없다.
4. 2. 보고서 오용 가능성
2018년에 보안 연구원들은 `report-uri`에 지정된 수신자에게 거짓 긍정 보고서를 보내는 방법을 시연했다.[27] 이를 통해 잠재적인 공격자는 해당 알람을 임의로 트리거할 수 있으며, 실제 공격이 발생했을 때 알람의 유용성을 떨어뜨릴 수 있다. 이 동작은 브라우저(클라이언트)가 보고서를 보내기 때문에 의도된 것이며 수정할 수 없다.5. 우회 (Bypasses)
콘텐츠 보안 정책(CSP)은 강력한 보안 메커니즘이지만, 특정 조건에서 우회될 수 있는 취약점이 발견되기도 했다. 이러한 우회 방법은 주로 오래되거나 취약한 버전의 자바스크립트 라이브러리, 웹 애플리케이션 프레임워크 코드 등을 악용하는 방식으로 이루어진다.[19][20][21][22]
5. 1. 알려진 우회 방법
2015년 12월[19]과 2016년 12월,[20] `nonce` 허용 목록 원본을 우회하는 몇 가지 방법이 공개되었다. 2016년 1월,[21] 동일한 서버에 호스팅된 오래되고 취약한 버전의 자바스크립트 라이브러리(CDN 서버에서 자주 발생)를 악용하기 위해 서버 전체 CSP 허용 목록을 활용하는 또 다른 방법이 공개되었다. 2017년 5월[22] 웹 애플리케이션 프레임워크 코드를 사용하여 CSP를 우회하는 또 다른 방법이 공개되었다.6. 보완적인 보안 조치
W3C는 콘텐츠 보안 정책(CSP)을 보완하는 여러 새로운 브라우저 보안 표준을 제안하고 있다.[33] 이 표준들은 CSP와 함께 웹 사이트 보안을 강화한다. 주요 제안 내용은 다음과 같다.
6. 1. W3C 제안 보안 표준
- '''하위 리소스 무결성(SRI)'''은 타사 서버(일반적으로 콘텐츠 전송 네트워크)에서 로드되는 리소스 파일(일반적으로 자바스크립트, CSS)의 무결성을 검증하여 변조 여부를 확인한다.[33]
- '''혼합 콘텐츠'''는 HTTPS를 통해 로드된 페이지에서 일반 텍스트 HTTP를 통해 콘텐츠를 로드하는 것을 방지한다.
- '''보안되지 않은 요청 업그레이드'''는 HTTPS로 마이그레이션된 페이지의 레거시 링크를 처리하는 방법에 대해 브라우저에 힌트를 제공한다.
- '''자격 증명 관리'''는 복잡한 로그인 방식을 지원하기 위한 통합 자바스크립트 API를 제공한다.
- '''Referrer 정책'''은 브라우저에 Referer 헤더 생성에 대한 힌트를 제공하는 CSP 확장 기능이다.[33]
7. 브라우저 확장 기능과의 관계
초기 CSP (1.0) 처리 모델(2012–2013)에 따르면,[28] CSP는 사용자가 설치한 브라우저 애드온 또는 확장 기능의 작동을 방해해서는 안 된다. CSP의 이 기능은 모든 애드온, 확장 기능 또는 북마클릿이 해당 스크립트의 출처에 관계없이 웹 사이트에 스크립트를 삽입하도록 효과적으로 허용하여 CSP 정책에서 면제될 수 있도록 했다.
그러나 이 정책은 이후 (CSP 1.1[29] 기준) 다음과 같은 문구로 수정되었다. 이전의 절대적인 "해서는 안 된다"는 문구 대신 "할 수 있다"는 단어의 사용에 주목해야 한다.
> 참고: 사용자 에이전트는 사용자 기본 설정, 북마클릿, 사용자 에이전트에 대한 타사 추가 기능 및 기타 메커니즘을 통해 사용자가 정책 시행을 수정하거나 우회하도록 '''허용할 수 있습니다'''.
절대적인 "해야 한다"는 문구는 브라우저 사용자가 정책 준수를 요청/요구하고 인기 있는 브라우저(Firefox, Chrome, Safari)에 이를 지원하기 위한 변경 사항을 설치하는 데 사용되었다. 이는 Twitter 및 GitHub과 같은 사이트에서 강력한 CSP 정책을 사용하기 시작하여 북마클릿 사용이 '중단'되었을 때 특히 논란이 되었다.[30]
W3C 웹 애플리케이션 보안 실무 그룹은 이러한 스크립트를 브라우저에서 구현된 신뢰 컴퓨팅 기반의 일부로 간주한다. 그러나 Cox Communications의 대표는 이 면제가 악의적이거나 손상된 애드온 또는 확장 기능에 의해 악용될 수 있는 잠재적인 보안 구멍이라고 실무 그룹에 주장했다.[31][32]
참조
[1]
웹사이트
Security/CSP/Spec - MozillaWiki
https://wiki.crome.o[...]
2011-06-29
[2]
웹사이트
State of the draft
http://www.w3.org/TR[...]
2016-10-05
[3]
웹사이트
Mozilla's Content Security Policy
http://ha.ckers.org/[...]
2011-06-29
[4]
웹사이트
Content Security Policy 1.0
http://www.w3.org/TR[...]
W3C
2015-11-13
[5]
웹사이트
Content Security Policy Level 3
https://w3c.github.i[...]
W3C
2023-05-05
[6]
웹사이트
Can I use Content Security Policy?
http://caniuse.com/c[...]
Fyrd
2013-02-22
[7]
웹사이트
Chrome 25 Beta: Content Security Policy and Shadow DOM
https://blog.chromiu[...]
Google
2013-02-22
[8]
웹사이트
Content Security Policy 1.0 lands in Firefox Aurora
https://hacks.mozill[...]
Mozilla Foundation
2013-06-16
[9]
웹사이트
RapidRelease/Calendar
https://wiki.mozilla[...]
Mozilla Foundation
2013-06-16
[10]
웹사이트
Bug 96765 - Implement the "Content-Security-Policy" header
https://bugs.webkit.[...]
WebKit
2015-08-07
[11]
웹사이트
Content Security Policy (CSP)
https://docs.microso[...]
Microsoft
2020-02-06
[12]
웹사이트
New Chromium security features, June 2011
https://blog.chromiu[...]
Google
2013-02-22
[13]
웹사이트
Introducing Content Security Policy
https://developer.mo[...]
Mozilla Foundation
2013-02-22
[14]
웹사이트
HTML META element
http://www.w3.org/TR[...]
W3C
2015-11-14
[15]
웹사이트
Defense in Depth: Locking Down Mash-Ups with HTML5 Sandbox
http://blogs.msdn.co[...]
Windows Internet Explorer Engineering Team
2014-04-13
[16]
웹사이트
ngCsp directive
https://docs.angular[...]
AngularJS
2020-10-27
[17]
웹사이트
django-security
https://github.com/s[...]
2022-11-21
[18]
웹사이트
Content security policy
https://github.com/b[...]
GitHub
2013-04-19
[19]
웹사이트
CSP 2015
http://blog.innerht.[...]
XSS Jigsaw
2015-12-12
[20]
웹사이트
Collection of CSP bypasses
http://sebastian-lek[...]
2017-06-05
[21]
웹사이트
An Abusive Relationship with AngularJS
http://www.slideshar[...]
2016-01-05
[22]
간행물
AppSec EU 2017 Don't Trust The DOM: Bypassing XSS Mitigations Via Script Gadgets by Sebastian Lekies
https://www.youtube.[...]
2017-06-05
[23]
웹사이트
An Introduction to Content Security Policy
http://www.html5rock[...]
HTML5 Rocks
2013-02-22
[24]
웹사이트
Content Security Policy Level 3
https://www.w3.org/T[...]
2021-01-12
[25]
웹사이트
CSP: report-to - HTTP {{!}} MDN
https://developer.mo[...]
2021-01-25
[26]
문서
For example in [[Django (web framework)|Django]] a CSP receiver is available in [https://github.com/sdelements/django-security django-security] module.
[27]
웹사이트
Flaring The Blue Team - When You Confuse Them You Lose Them
https://www.secjuice[...]
2019-12-27
[28]
웹사이트
CSP Processing Model
http://www.w3.org/TR[...]
2013-10-06
[29]
웹사이트
CSP 1.1: Add non-normative language for extensions.
https://github.com/w[...]
GitHub
2016-09-14
[30]
웹사이트
Bug 866522 - Bookmarklets affected by CSP
https://bugzilla.moz[...]
Mozilla
2016-09-14
[31]
웹사이트
Subverting CSP policies for browser add-ons (extensions).
https://www.w3.org/B[...]
2013-10-06
[32]
웹사이트
Re: [CSP] Request to amend bookmarklet/extensions sentence in CSP1.1
http://lists.w3.org/[...]
2015-10-08
[33]
웹사이트
Web Application Security Working Group
https://github.com/w[...]
2015-11-13
[34]
웹사이트
Noscript security suite addon for Firefox
https://addons.mozil[...]
2017-06-11
[35]
웹사이트
The NoScript Firefox extension — Official site
https://noscript.net[...]
2017-06-11
[36]
웹사이트
HTTP Switchboard for Chrome
https://chrome.googl[...]
[37]
웹사이트
HTTP Switchboard for Opera
https://addons.opera[...]
2017-06-11
[38]
웹인용
Security/CSP/Spec - MozillaWiki
https://wiki.mozilla[...]
2009-03-11
[39]
웹인용
State of the draft
http://www.w3.org/TR[...]
2016-09-13
[40]
웹인용
Mozilla's Content Security Policy
http://ha.ckers.org/[...]
2009-06-01
[41]
웹인용
Content Security Policy 1.0
http://www.w3.org/TR[...]
W3C
[42]
웹인용
Content Security Policy Level 3
https://w3c.github.i[...]
W3C
[43]
웹인용
Can I use Content Security Policy?
http://caniuse.com/c[...]
Fyrd
[44]
웹인용
Chrome 25 Beta: Content Security Policy and Shadow DOM
https://blog.chromiu[...]
Google
2013-01-14
[45]
웹인용
Content Security Policy 1.0 lands in Firefox Aurora
https://hacks.mozill[...]
Mozilla Foundation
2013-05-29
[46]
웹인용
RapidRelease/Calendar
https://wiki.mozilla[...]
Mozilla Foundation
2013-05-29
[47]
웹인용
Bug 96765 - Implement the "Content-Security-Policy" header
https://bugs.webkit.[...]
WebKit
2012-10-31
[48]
웹인용
New Chromium security features, June 2011
https://blog.chromiu[...]
Google
2011-06-14
[49]
웹인용
Introducing Content Security Policy
https://developer.mo[...]
Mozilla Foundation
[50]
웹인용
HTML META element
http://www.w3.org/TR[...]
W3C
[51]
웹인용
Defense in Depth: Locking Down Mash-Ups with HTML5 Sandbox
http://blogs.msdn.co[...]
Windows Internet Explorer Engineering Team
[52]
웹인용
ngCsp directive
http://docs.angularj[...]
AngularJS
[53]
웹인용
django-security
https://github.com/s[...]
[54]
웹인용
Content security policy
https://github.com/b[...]
GitHub
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com