콘텐츠 보안 정책(Content-Security policy)이란?
신뢰할 수있는 웹 페이지 컨텍스트에서 악의적 인 콘텐츠 실행으로 인한 크로스 사이트 스크립팅, 클릭 재킹 및 기타 코드 삽입 공격을 방지하기 위해 도입 된 컴퓨터 보안 표준이다.
웹에서 사용하는 컨텐츠(이미지,스크립트 등등)에 대한 규칙 같은거라 생각하면 된다.
SOP(Same Origin Policy)와 유사하게 차단한다는 점에서 비슷하지만,
CSP의 경우 웹 사이트가 직접 룰을 적용해서 사용하게 된다.
XSS공격은 브라우저가 애플리케이션에 속한 스크립트와 그렇지 않은 악의적인 스크립트를 구분하지 못할때 생기는 취약점이다.
브러우저는 소스에코드에 상관없이 페이지에 요청하는 코드라면 무조건적으로 그 코드가 악의적인지 아닌지 상관없이 다운로드하여 실행하기 때문이다. 이를 방지하기 위해 CSP를 사용하는 것이다.
서버에 제공하는 모든것을 맹목적으로 신뢰하는 대신 CSP는 신뢰할 수 있는 콘텐츠 소스의 허용 목록을 생성 할 수 있게 해주는 Content-Security-Policy HTTP 헤더를 정의하고 브라우저에는 이런 소스에서 받은 리소스만 실행하거나 렌더링할 것을 지시하게 된다. 그러면 공격자가 아무리 악성 스크립트를 주입하더라도 그 스크립트가 허용 목록과 일치 하지 않으니 공격실행 자체가 될 수 없는 것이다.
CSP 정의 예시
아래 예시는 코드의 출처가 다음 두 가지 소스 중 하나일 때만 스크립트 실행을 허용하는 정책을 정의하는 코드이다.
Content-Security-Policy: script-src 'self' http://apis.google.com
CSP 세부 리소스 정책 목록
CSP는 페이지가 로드하도록 허용되는 리소스를 상당히 세분화하여 제어할 수 있는 다양하고 충분한 정책 지시문을 제공한다.
- base-uri 는 페이지의 <base> 요소에 나타날 수 있는 URL을 제한합니다.
- child-src 는 작업자와 삽입된 프레임 콘텐츠에 대한 URL을 나열합니다. 예: child-src https://youtube.com을 사용하면 다른 출처가 아니라 YouTube에서 가져온 동영상을 삽입할 수 있습니다. 지원 중단된 frame-src 지시문 대신 이 지시문을 사용하세요.
- connect-src 는 (XHR, WebSockets 및 EventSource를 통해) 연결할 수 있는 출처를 제한합니다.
- font-src 는 웹 글꼴을 제공할 수 있는 출처를 지정합니다. font-src https://themes.googleusercontent.com을 통해 Google의 웹 글꼴을 사용할 수 있습니다.
- form-action 은 <form> 태그에서의 제출을 위해 유효한 엔드포인트를 나열합니다.
- frame-ancestors 는 현재 페이지를 삽입할 수 있는 소스를 지정합니다. 이 지시문은 <frame>, <iframe>, <embed> 및 <applet> 태그에 적용됩니다. 이 지시문은 <meta> 태그에서 사용할 수 없고 HTML 이외의 리소스에만 적용됩니다.
- frame-src 는 지원 중단되었습니다. child-src 를 대신 사용하세요.
- img-src 는 이미지를 로드할 수 있는 출처를 정의합니다.
- media-src 는 동영상과 오디오를 제공하도록 허용되는 출처를 제한합니다.
- object-src 는 플래시와 기타 플러그인에 대한 제어를 허용합니다.
- plugin-types 는 페이지가 호출할 수 있는 플러그인의 종류를 제한합니다.
- report-uri 은 콘텐츠 보안 정책 위반 시 브라우저가 보고서를 보낼 URL을 지정합니다. <meta> 태그에서는 이 지시문을 사용할 수 없습니다.
- style-src 는 script-src에서 스타일시트에 해당합니다.
- upgrade-insecure-requests 는 사용자 에이전트에 URL 구성표를 다시 작성하여 HTTP를 HTTPS로 변경하도록 지시합니다. 이 지시문은 다시 작성해야 할 이전 URL이 많은 웹사이트를 위한 것입니다.
출처
'[CS] IT 용어 모음' 카테고리의 다른 글
AWS Cloudfront란? (0) | 2024.01.11 |
---|---|
AWS ACM이란? (0) | 2024.01.11 |
개념 사전 for Modern Application Development (0) | 2021.10.18 |
[React] Dom 접근 및 조작 (0) | 2021.07.02 |
[React] 컴포넌트 Event처리 (0) | 2021.07.02 |
최근댓글