2024. 9. 19. 18:06ㆍWeb 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 |