READMD
XSS
능동적 공격
- 공격자가 웹 어플리케이션에 직접 공격 코드를 보내는 유형이다.
- 디비를 공격하는
SQL 인젝션이 여기에 속한다.
수동적 공격
- 준비한 피싱 사이트를 이용해 방문한 사람이 코드를 실행하도록 공격하는 방법이다.
- XSS가 여기 속한다.
XSS 구조
- 예를 들어 페이지 강제로 이동하는 태그가 있는 상황을 의미한다.
세가지 XSS
-
반사형 XSS: 공격자가 준비한 함정에서 요청에 잘못된 스크립트를 서버에서 생성해 발생하는 XSS -
저장형 XSS: 공격 코드가 서버에서 저장되 사용자를 공격 -
DOM 기반 XSS:DOM기반 취약점을 공격하는 것
XSS 대책
-
문자열 이스케이프:<>을 특별한 기호로 해석해 이스케이프 처리하기 -
속성값의 문자열을 쌍따옴표로 감싸기: 속성값의 함수로 접근할 수 있게되면 사용자가 코드를 삽입할 수 있다. -
링크의 URL 스키마를 http/https로 제한하기:href속성을 이용한XSS공격은 앞에서 설명한 이스케이프 처리와 쌍따옴표를 묶는 방법으로 예방할 수 있다. -
DOM 조작을 위한 매서드와 프로퍼티 사용:InnterHtml등을 이용해 내부HTML을 파싱할 때 사용할 수 있다. -
쿠키에
HTTPONLY 속성을 추가하기 : 이를 이용해 자바스크립트로 쿠키를 가져올 수 없게된다. -
프레임워크 기능을 사용하는 방법 : 기본적으로 프레임워크는 이런 기능등을 제공해주지만 취약점도 존재한다
- 대표적 에시로 REACT 의
dangerouslySetInnerHTML이 존재한다. 이는INNERHTML이랑 비슷한 용도로 dom에 접근하는 요소로 - 이를 방지하기 위해선
DOMPurify나 이스케이프 처리를 해줘야한다. - 또한 리엑트는 url 요소를 자바스크립트 스키마는 막지 않기 때문에 검증작업이 필요하다.
- 대표적 에시로 REACT 의
Content Security Policy를 사용한 XSS 대처
-
CSP는 악성 코드를 포함하는 인젝션 공격을 감지해 피해를 막는 브라우저 기능이다. -
CSP헤더를 적용하면 허가되지 않은 자바스크립트등의 불러오기를 실행 및 다한 할 수 있다.
Contnet - Security - Policy : script -src * . trusted.example