Spring Framework/끄적끄적

[Spring] XSS 공격과 보안처리 방법

포포015 2021. 6. 19. 13:59

XSS 공격이란?

 

흔히 사이트의 게시판의 게시글 작성 시 내용에 스크립트 코드를 삽입하여 게시글을 읽는 사용자의 쿠키정보 탈취 하거나 악성프로그램 다운로드, 공격자가 의도한 URL로 이동시키는 등 개발자가 의도하지 않은 기능을 동작하도록 만든다.

 

XSS의 공격 방식은 크게 Reflected XSS, Stored XSS, DOM Based XSS 세 가지로 분류할 수 있으며

이에 대한 설명은 링크로 대신 한다.

 

XSS(Cross Site Scripting) 공격이란? - https://4rgos.tistory.com/1

XSS 공격 실습방법 - https://g-idler.tistory.com/12

XSS 공격이란 - https://brownbears.tistory.com/250

 

XSS 취약점에 대한 보안처리 방법

필자가 알고 있는 세가지 방법이다.

1. JSTL <c:out> 태그 사용

2. script 코드 검사

3. XSS Filter 적용

 

1. JSTL <c:out> 태그 사용

jstl의 <c:out value=""/> 태그를 사용하면 모든 값은 문자열로 출력이 된다.

이 방법은 모든 view 페이지에 작성을 해야하므로 비효율적이다. 간단한 프로젝트같은경운 사용할수 있지만,

규모가 조금만 커져도 비효율적이다

 

2. script 코드 검사

DB에 입력전 front-end 또는 back-end에서 입력값에 script 코드가 포함되어 있는지 확인하는 방식이다.

script코드가 포함 되었을 경우 등록이 불가하도록 처리해준다.

indexOf, constains, startWith, 정규식 등을 활용하여 script 코드 포함여부 확인이 가능 하다.

근데 사실이것도 일일이 하나하나 검증해야 되기떄문에 이것도 비효율적이다.

 

3. XSS Filter 적용

Servlet Filter에 parameter에 포함된 HTML 엔티티를 이스케이프(escape) 문자로 치환하는 XSS Filter를 적용 한다.

XSS Filter는 공수가 적고 가장 손쉬운 방법이다.

XSS Filter의 동작원리를 간략히 설명하면 ServletRequest를 wrapping할 클래스를 생성하여 getParameter, getParameterValues를 이스케이프 문자로 치환하도록 재정의 하고 Filter간 Filter Chain 특성을 이용하여 wrapping한 객체를 다음 Filter로 전달 한다

 

 

lucy-xss filter 참조한 블로그 - https://lovediv.tistory.com/32

 

여기서 form형식으로 보내는경우는 lucy xss filter 라고 네이버에서 개발한 xss 필터를 적용하면 적용이되는데, 

json 타입의 경우 필터가 적용되지않아서 참조했던 링크를 걸어두겟다,

필자는 링크의 내용중 2번쨰 방법을 사용했다 - https://lahuman.jabsiri.co.kr/155