본문 바로가기

Programming/일반

XSS(Cross Site Scripting) 공격 및 대응 방법

크로스 사이트 스크립트(XSS) 공격

XSS 공격이란?

웹 페이지에 악의적인 스크립트를 포함해 사용자 측에서 실행되게 유도할 수 있는 공격 기법

정보처리기사, 수제비

① 공격자가 악성 스크립트 파일을 웹 서버에 설치

② 클라이언트에서 악성 스크립트가 설치되어 있는 웹 브라우저 실행

③ 웹 서버의 악성 스크립트 실행되어 클라이언트(사용자) 감염, 감염 후 개인 정보 등 공격자에게 유출

 

XSS 공격의 시큐어 코딩 구현

외부 입출력값에 스크립트가 삽입되지 못하도록 & <> " ' / ( ) 등에 대해 문자열 치환 함수를 구현한다.

XSS의 3가지 공격방법으로 Reflected XSS, Stored XSS, DOM XSS가 있다.

구분 코드 및 설명
조치 전 <% String keyword = request.getParameter("keyword"); %> ----- 
검색결과 : ${m.content} -----
<script type="text/javascript">
document.write ("keyword:" + <%=keyword%>); -----
</script>
① 외부 입력값을 검증 없이 화면에 출력될 경우 공격스크립트가 포함된 URL을 생성할 수 있어 안전하지 않음(Reflected XSS)
② 게시판의 입력 form을 통해 외부 값이 DB에 저장하고 검증 없이 화면에 출력 시 공격스크립트가 실행되어 안전하지 않음(Stored XSS)
③ 서버를 거치지 않는 공격스크립트가 포함된 URL을 생성할 수 있어 안전하지 않음(DOM 기반 XSS)
조치 후 <% String keyword = request.getParameter("keyword"); %>
keyword = keyword.replaceAll("&", "&amp;"); ----- ①

keyword = keyword.replaceAll("<", "&lt;"); ----- ①
keyword = keyword.replaceAll(">", "&gt;"); ----- ①
...

<%@ taglib prefix="c" url="http://java.sun.com/jsp/jstl/core"%> ----- ②
<%@ taglib url="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> ----- ②

검색결과 : <c:out value="${m.content}"/> ----- ②

<script type="text/javascript">
document.write ("keyword:"<%=Encoder.encodeForJS(Encoder.encodeForHTML(keyword))%>); ----- ③
</script>
① 입력값에 대하여 스크립트 공격 가능성이 있는 문자열을 치환
② JSP에서 출력값에 JSTL의 <c:out>을 사용하여 처리
③ 잘 만들어진 외부 라이브러리를 활용 (NAVER XSS Filter, OWASP ESAPI, OWASP Java Encoder)

 

'Programming > 일반' 카테고리의 다른 글

메타버스 개념 및 저작권 이슈  (0) 2021.10.08
블록체인이란?  (0) 2021.03.17
블랙박스 테스트/화이트박스 테스트  (0) 2020.09.14
JSON 이란?  (0) 2020.09.12
WSDL / SOAP / UDDI 개념  (0) 2020.09.12