CSP : Content-Security-Policy

2024. 9. 19. 18:06Web Security/web hacking

이제 xss의 경우 sop와 cors를 통해서 방어됩니다. csrf의 경우 samesite, csrf token 등으로 보호됩니다. 그렇지만 html을 입력 받는 창을 통해서 xss와 csrf 취약점을 발생시킬 수 있습니다. 물론 필터링을 통해서 방어해야 되지만 브라우저에서 제공하는 정책이 존재하는데 이것이 바로 CSP입니다.

 

CSP는 웹 페이지에 사용될 수 있는 자원의 위치, 출처 등에 제약을 걸 수 있습니다. 따라서 공격자가 웹 사이트에 본래 있지 않던 스크립트를 삽입하거나 공격자에게 권한이 있는 서버 등에 요청을 보내지 못하도록 막을 수 있습니다.

 

CSP는 Content-Security-Policy를 헤더에 넣어서 사용하는데요. 서버가 response하게 전에 Content-Security-Policy : 라는 헤더를 추가해서 돌려줍니다. CSP를 보고 브라우저는 html를 랜더링 합니다. (meta 태그로도 설정가능합니다.)

 

CSP 헤더는 1개 이상의 정책 지시문이 세미콜론(;)으로 분리된 형태로 이루어져 있습니다. 예시로 아래의 코드처럼 되어 있습니다. 아래의 코드는 기본적으로 src는 자기자신의 도메인만 허락한다는 뜻입니다.

Content-Security-Policy: default-src 'self'

 

 

이외에 기본적으로 CSP는 다음 것들을 유해하다고 판단합니다. 기본적으로 막습니다.

 

1. js 와 css의 인라인 코드

2. on*이벤트 헨들러 

3. javascript:과 같은 url 스킴

4.  문자열을 자바스크립트로 코드로 실행해주는 함수 : eval();

 

아마도 이 기본적으로 막는게 엄청 큰 것 같습니다.

 

이러한 csp를 우회할 수 있는 방법이 몇 가지 존재합니다.

 

 

1. 파일 업로드 후 참조

2. jsonp 존재시 이용

3. base-uri 미지정시 이용

-   base-uri 지시문을 임의로 지정하지 않는 이상 default 초기 값이 존재하지 않습니다.

 

 

마지막으로 다음 사이트 csp 설정이 올바른지 테스트 해줍니다 

https://csp-evaluator.withgoogle.com/

 

'Web Security > web hacking' 카테고리의 다른 글

CSS injection  (0) 2024.09.23
Relative Path Overwrite  (0) 2024.09.22
CSRF - CSRF token, SameSite Cookie  (1) 2024.09.19
SOP와 CORS  (2) 2024.09.18
XSS에 대해서 기초적인 내용  (2) 2024.09.16