본문 바로가기

해킹 방어

[NOOBHACK] CSP보안 기법

오늘은 아 몰랑

CSP(Content Security Policy) 컨텐츠 보안 정책이나 배우자

 

정말 정말 간단하게 말하면 코드를 실행하기 전에 어느 링크로 부터 코드에 왔는지 확인하고 코드를 실행 하는 보안 기법이다

 

예를 들어 서버가 A링크에서 온 입력값만 허용하고 받아 들인다면 B링크,C링크에서 오는 입력값이나 코드는 전부 받아들이지 않는 것 입니다. 정말 간단하쥬?

 

XSS를 막기 위한 목적으로 만든 보안 기법이다

 

 

지시문들의 모임인데 이게 뭐냐면 리소스의 출저를 정의하는 지시문이다

default-src -src로 끝나는 모든 리소스의 기본 동작을 제어합니다. 만약 CSP 구문 내에서 지정하지 않은 지시문이 존재한다면 default-src의 정의를 따라갑니다.
img-src 이미지를 로드할 수 있는 출처를 제어합니다.
script-src 스크립트 태그 관련 권한과 출처를 제어합니다.
style-src 스타일시트 관련 권한과 출처를 제어합니다.
child-src 페이지 내에 삽입된 프레임 컨텐츠에 대한 출처를 제어합니다.
base-uri 페이지의 <base> 태그에 나타날 수 있는 URL을 제어합니다.

그리고 이건 출저의 종류들이다

*://example.com 출처의 scheme은 와일드카드를 이용해 표현할 수 있습니다.
https://*.example.com 출처의 호스트 서브도메인은 와일드카드를 이용해 표현할 수 있습니다. (단, 와일드카드는 호스트의 중간에 들어갈 수 없습니다. i.e) https://www.*.com, https://*.example.*
또한 서브도메인을 와일드카드로 표현할 시, 서브도메인이 붙어있지 않는 도메인은 포함되지 않습니다. i.e) https://*.example.com으로 출처를 표기할 경우, https://example.com은 포함 안됨
https://example.com:* 출처의 포트는 와일드카드를 이용해 표현할 수 있습니다.
none 모든 출처를 허용하지 않습니다.
self 페이지의 현재 출처 (Origin) 내에서 로드하는 리소스만 허용합니다.
unsafe-inline 예외적으로 인라인 코드의 사용을 허용합니다.
unsafe-eval 예외적으로 eval과 같은 텍스트-자바스크립트 변환 메커니즘의 사용을 허용합니다.
nonce-<base64-value> nonce 속성을 설정하여 예외적으로 인라인 코드를 사용합니다. <base64-value> 는 반드시 요청마다 다른 난수 값으로 설정해야 합니다. 해당 출처를 설정하면 unsafe-inline 은 무시됩니다.
<hash-algorithm>-<base64-value> script 혹은 style 태그 내 코드의 해시를 표현합니다. 해당 출처를 설정하면 unsafe-inline 은 무시됩니다.

출저:https://learn.dreamhack.io/321#6 고마워요 드림핵!

 

이런식으로 headers에서 하면 되는데 코드를 보여줘야 알 것 같다

response.headers[
        "Content-Security-Policy"
    ] = f"default-src 'self'; img-src https://dreamhack.io; style-src 'self' 'unsafe-inline'; script-src 'self' 'nonce-{nonce}'"
 
이런 식으로 쓰이는데 이를 해석하자면 
 
default-src는 현재 페이지 내에 로드하는 리소스만 허용하고
이미지는 이 출저에만 현재 페이지에서만 허용하고, 인라인 코드의 사용을 하거한다
script-src는 예외적으로만 현재 페이지에서 오는 스크립트만 허용한다
 
 

'해킹 방어' 카테고리의 다른 글

[NOOBHACK] Canary 메모리 보호 기법  (0) 2022.08.13
[NOOBHACK] NX(NO- eXecute)  (0) 2022.08.12
[NOOBHACK] 메모리 보호 기법 ASLR  (0) 2022.08.12