CSP란

동동이·2022년 7월 4일
2
post-thumbnail

개요

먼저 CSP란 (Content Security Policy)의 약자로, 웹 브라우저에서 각종 XSS공격을 막기위해 만들어진 정책으로, 아무나 인라인 자바스크립트나 CSS를 입력할 수 없도록한다.

지시문설명
default-src디폴트 설정을 바꾼다
connect-src연결 설정을 바꾼다
script-src스크립트 권한 설정을 바꾼다
child-srciframe 태그에 들어가는 src에 대한 설정을 바꾼다
style-srcstyle sheet에 관련된 설정을 바꾼다
font-srcfont출처와 관련된 설정을 바꾼다
img-srcimg 주소 설정 바꾼다
report-urlCSP를 위반할때 보고서를 보낼 출처를 지정한다.

src-옵션설명
none그냥 안됨
특정도메인그 도메인만 허용
self현재 도메인만 허용
unsafe-inline그냥 다 됨
nonce-암호화된 문자밑에 설명

도메인을 src-옵션에 넣을땐 특정요소를 와일드 카드로 대체할 수 있다

  • *://example.com
    출처의 scheme을 와일드카드로 대체할 수 있다.
  • https://*.example.com
    서브 도메인을 와일드 카드로 대체할 수 있다.
    dong.*.com같이 호스트의 중간에 들어가는건 안된다.
  • http:/dong.com:*
    포트를 와일드카드로 대체할 수 있다.

실제로 사용되는 방법은 2가지가 있다

  1. http 헤더를 통해 설정하는 방법

    Content-Security-Policy: <policy-directive>; <policy-directive>

    이런 형태이다.
    예시를 들어보자면

    Content-Security-Policy: default-src 'self' https://itsmydomain.com

    이런식으로 쓰면 프로그램내 자원들을 로드할때 같은 오리진이나 https://itsmydomain.com에서 온 자원만 허용한다

  2. meta 태그로 설정하는 방법
    말그대로 html에서 메타정보를 정의하는 태그인 <meta>태그를 이용하는 방법이다.
    바로 예시를 들어보자면

<meta http-equiv="Content-Security-Policy"content="default-src 'self' https://example.dreamhack.io">

(위에 코드와 같은 역할을 하는 코드임)

nonce 설정

unsafe-inline은 그냥 다 허용하는 것이라고 하면, nonce는 그보다는 보안성을 챙긴 옵션이다. 특정 암호화 값을 이용해 script 태그를 검증할 수 있다

ex)

<script nonce='히히 나 암호화된 값'>
	alert('히히 난 실행되지롱~');
</script>
<script>
  	alert('ㅠㅠ 난 실행안되지롱 ㅜㅜ');
</script>

이렇게 된다.

profile
보안 공부하는 사람

0개의 댓글