ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 화이트 리스트 (White List) 기법 이용한 크로스 사이트 스크립팅(XSS) 방어 예제
    보안(Security)/XSS 2018. 9. 10. 10:04

    크로스 사이트 스크립팅(Cross Site Scripting)은 "게시판, 웹 메일 등에 삽입된 악의적인 스크립트에 의해 페이지가 깨지거나 다른 사용자의 사용을 방해하거나 쿠키 및 기타 개인 정보를 특정 사이트로 전송시키는 공격" 이라 네이버 지식백과에 기술되어 있다. 중요한 점은 웹 페이지에 스크립트 삽입이 가능하다는 점이다.
    게시판 페이지를 통해 확인하자.


     글 작성할 때 alert을 호출하는 스크립트를 삽입후 등록한다.

    정상적인 글을 클릭해 들어가면

    제목과 내용이 잘 나온다.

    반면 스크립트를 삽입한 게시글에서는

    다음과 같이 alert이 호출되고

    글 내용이 없게 되는 것이다. 게시판의 개발 목적 및 용도와 적합하지 않게 되고, 보안 또한 취약해지게 된다.

    이를 극복하기 위해 네이버에서 lucy-xss를 지원한다. 사용 방법 포스팅

    http://mvnrepository.com/ 접속해 lucy-xss 검색

    버전 클릭

    JAR 파일 다운로드

    WEB-INF 하위에 lib 폴더 만들어 붙여넣기 하면 라이브러리 사용할 수 있다.

    이후 필터링 코드를 받는다.

    https://github.com/naver/lucy-xss-filter 접속 - conf 클릭

    lucy-xss-superset.xml 클릭

    코드를 보면 다음과 같이 script, javascript에 대한 모든 경우의 수를 치환한다. 이를 White List 기법이라고 한다. 해당 내용을 코드에 가져와야 한다.

    Raw 클릭

    코드 복사할 수 있도록 새 페이지가 생성된다. 전체 복사

    새 파일을 src/main/java 하위에 생성

    File로 지정해

    파일명 lucy-xss-superset.xml 로 생성한다(깃허브 파일명과 일치해야 한다.)

    복사했던 내용 붙여넣기하면 컨트롤러에서 사용 가능하다.

    게시글 작성 페이지 jsp. 게시글 커맨드 객체의 멤버변수명과 일치하게 작성했다.

    게시글 작성 컨트롤러. 따로 set 해주지 않아도 들어가지만 스크립트가 동작하는 상태이기 때문에 XssFilter 객체를 선언해 필터링을 적용한 이후 값을 넣도록 해준다.

    필터링 적용시킨 후 스크립트를 입력하고

    글을 보면


    스크립트 동작하지 않고 Text로 출력됨을 확인할 수 있다.


Designed by Tistory.