크로스 사이트 스크립트(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("&", "&"); ----- ① keyword = keyword.replaceAll("<", "<"); ----- ① keyword = keyword.replaceAll(">", ">"); ----- ① ... <%@ 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 |