-
xssJava/Spring 2019. 5. 7. 15:42
■xss(Cross-site Scripting)란??
- 특정 웹 페이지의 허점을 찾아 자바스크립트를 사용하여 타인의 정보를 빼가는 공격!
■xss 공격의 예
- <script>공격코드</script> <img onerror="공격코드">
<a href="공격코드"> <iframe src="공격코드"> 태그 등을
form 입력 페이지 등을 통해 서버 DB에 저장시킨다.
- 공격 코드는 js로 구성되기도 하고, xss체크에 걸리지 않기 위해 아스키코드로
변환한 js 코드로 구성되기도 한다.
- 그리고 피해자가 특정 페이지에 접속하면 공격자가 저장한 악성 데이터가 로드되고
실행된다. 피해자의 브라우저는 공격자의 스크립트에 의해 세션을 탈취당하여 개인 정보를
털리기도 하고, 순식간에 악성 사이트로 이동되기도 한다.
- 더 많은 예 : https://handongchoi.com/2017/11/18/xss-script/
■xss를 방어하기 어려운 이유??
- 법을 통해 범죄자를 100% 없앨 수 없는 것과 비슷하다고 생각한다. 법을 아무리 정교하게
만들어도 어떻게든 허점을 찾아 부당한 이득을 취하려는 범죄자가 생기기 마련이다
- 서버가 사용자의 브라우저로 html, js, css 파일들을 내려줄 때, 같이 전송될 수 있는공격 코드들을 필터링 해야 한다. 그런데 그 공격들은 정체되어 있지 않고 매번 진화한다.어떤 형태로 변화할 지 모르는 스크립트 공격들을 완벽히 예측해서 막기는 어렵다.■그래도 최대한 xss를 막으려면??
- 웹 페이지 입력 폼에서 올바른 유효성 검사 또는 필터링 처리 기능을 추가하고,
클라이언트에서 실행될 코드로 악성 코드를 필터해야 한다.
- 직접 구현:
private String cleanXSS(String value) {value = value.replaceAll("<", "& lt;").replaceAll(">", "& gt;");value = value.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;");value = value.replaceAll("'", "& #39;");value = value.replaceAll("eval\\((.*)\\)", "");value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\""");value = value.replaceAll("script", "");return value;}cs - 네이버의 lucy-xss-filter와 lucy-xss-servlet-filter 라이브러리를 이용한 구현
- maven or gradle에 dependency를 추가하고 필터클래스 등 필요한 곳에 클래스 사용
- 자세한 사용법 참고
-https://github.com/naver/lucy-xss-filter
-https://github.com/naver/lucy-xss-servlet-filter
http://egloos.zum.com/nestofeagle/v/1809584
'Java > Spring' 카테고리의 다른 글
@ControllerAdvice와 @ExceptionHandler (0) 2020.07.27 Spring 어노테이션 (0) 2019.05.20 IOC (DI) (0) 2019.04.06 스프링이란 (0) 2019.04.06 프레임워크vs라이브러리 (0) 2019.04.06 댓글