정의 : 특정 한 Script를 삽입하여 사용자 쿠키 및 Session과 같은 정보를 탈취 하여 이득을 취하려고 하는 행위
Reflected XSS
정의 : 공격자가 미리 취약한 web page를 탐색 후 해당 web page에 대한 스크립트가 포함된 url을 사용자에 메일/메신저 등으로 보내어 사용자가 그 url을 실행 시키게 된다면 (Script 코드가) 삽입된 요청을 취약 서버에 전송 -> 이 때 스크립트코드가 삽입된 web page가 받아지기 때문에 cookie 및 session등을 틸취 할 수 있음
순서 : script 코드 삽입한 url 을 사용자에게 보냄 -> 사용자 url 실행 -> script 가 포함된 web page 받아옴 -> web page에서 script 문장 실행
Stored XSS
정의 : 웹 게시판에 스크립트를 미리 삽입해 두고, 사용자가 해당 web page를 다운 받음 그 해당 script가 실행 되는 방식을 취하는 공격 기법
Spring XSS 공격 방어 naver lucy xss filter 사용
Java servlet 기반 라이브러리
웹 애플리케이션으로 들어오는 모든 요청 파라미터에 대해 기본적으로 XSS 방어 필터링을 수행한다.
비즈니스 레이어에 코드 수정할 필요없음 -> 해당 오픈소스와, xml 파일에 다 구현 하면됨
설정 파일 하나로 XSS 방어 절차가 파악됨
단점
일괄 적용이 되어 영향 받기 때문에 정확한 필터링 룰 정의가 중요함
xml 을 해석 하지 못하면 코드 작성에 어려움이 있음 -> 내이야기 -> 처음에 힘들었음
xml 해설
Config : 코드 여역에서 작성하는 부분 -> Root element로 설정(@Configuration이 있음)
defenders : parameter 값을 변경할 때 사용할 defender 인스턴스 집합
defender : 파라 미터 값을 변경할 때 사용하는 인스턴스 ex) > 을 > 으로 변경 시켜주는 것들
defender 종류
XssPreventer : HTML로 인식될만한 요소를 완전 제거 >을 > 로 변경
XssSaxFilter(XssFilter의 개성된 형태) : XSS 공격이 가능한 HTML 요소를 신뢰할 수 있는 코드로 변환, 삭제하는 기능을 제공, 공격이 가능하지 않은 HTML 요소는 허용
닫는 태그만 있음 검사하지 않는다.
태그의 자식 부모 여부를 따지지 않고 그냥 존재 여부만 판단
포함 관계 여부를 판단하지 않기 때문에 성능상으로 더 좋음
ex 코드 :
mail 서비스, 메세지 보드 서비스는 tag 정보를 그대로 사용해도됨 -> 실제 메시지 보드 내부에서 script문장이 실행 되지 않는 다면 굳이 바꾸지 않아도 됨
결론 둘다 전부 lucy-xss-default-sax.xml을 상속받은 xml 파일 읽어와 그에 맞는 패턴을 가진 입력이 들어오면 xssPreventer가 처리 해주는 과정을 가진다.
Filtering 시점 : url 호출 시점이 아닌 서버 코드에서 parameter 값을 획득하는 ServletRequest의 getParamter(), getParamterValues(), getParameterMap() 함수가 호출 시 필터링을 해준다.
XssPreventDefeneder, XssSaxFilterDefender, XssFilterDefender 3개의 클래스는 lucy-xss-filter의 api를 호출하며 XssPreventerDefender는 XssPreventer를, XssSaxFilterDefender는 XssSaxFilter를, XssFilterDefender는 XssFilter를 사용한다. 여기서 내가 사용한 것은 XssPreventDefender 이다 모든 것에 내부 태그가 없기 때문에 사용함(mail 서비스)