Part 7 : OWASP 2017 TOP 10 RC2 A7 - 크로스사이트 스크립팅[Cross-Site Scripting, XSS]

개발/OWASP 2017 2020.12.17 댓글 임통끼
728x90

 

 

A7 : 크로스사이트 스크립팅[Cross-Site Scripting, XSS]

 

 

* 정의

웹 페이지에 악의적인 스크립트를 포함시켜 사용자 측에서 실행되게 유도할 수 있습니다. 예를 들어, 검증되지 않은 외부 입력이 동적 웹 페이지 생성에 사용될 경우, 전송된 동적 웹 페이지를 열람하는 접속 자의 권한으로 부적절한 스크립트가 수행되어 정보유출 등의 공격을 유발할 수 있습니다.

 


 

* 대응방법

1. 외부입력 값에 스크립트가 삽입되지 못하도록 문자 변환 함수 또는 메서드를 사용하여 < > & “ 등을 < > & " 로 치환해야 합니다. HTML태그를 허용하는 게시판에서는 허용되는 HTML 태그들을 화이트리스트로 만들어 해당 태그만 지원하도록 해야합니다.


- 코드 예제

1
<script>alert(document.cookie);</script>
c

파라미터(id) 에 위와 같은 스크립트 코드가 입력되고, 이 값을 그대로 출력에 사용하는 경우, 공격자는 공격 코드를 이용하여 피해자의 쿠키 정보를 빼돌릴 수 있습니다.

 

 

** 안전하지 않은 JAVA 코드

1
<String customerID = request.getParameter(“id”); %>
cs

  요청한 사용자: <%=customerID%>
  처리결과: ${m.content}

  서버의 처리 결과를 사용자 화면에 출력하는 경우, 문자열 치환 함수를 이용하여 출력값을 HTML 인코딩하거나, JSTL을 이용하여 출력 또는 잘 만들어진 외부 XSSFilter 라이브러리를 활용하여 출력 하는 것이 안전합니다

 

 

  ** 안전한 JAVA 코드

1
2
3
4
5
6
7
8
9
10
11
// 방법1. 서블릿에서 출력값에 HTML인코딩 
String cleanData = input.replaceAll(“<”, “&lt”).replaceAll(“>”, “&gt”); out.println(cleanData);
 
// 방법2. JSP에서 출력값에 JSTL HTML 인코딩 
<textarea name=”content”>${ fn:escapeXml(model.content) }</textarea>
 
// 방법3. JSP에서 출력값에 JSTL Core 출력 포맷을 사용하여 텍스트로 처리
<textarea name=”content”><c:out value=”${model.content}”/></textarea>
 
// 방법4. 잘 만들어진 외부 XSSFilter 라이브러리를 활용하여 출력값에 필터링
XssFilter filter = XssFilter.getInstance(“lucy-xss-superset.xml”); 
cs

 

 


 

* 실제 사례

 

[보안뉴스] 트위터 XSS 공격 받아...“헉! 포르노 사이트로 연결”

2010-09-22 12:23 보안전문가들 이미 몇 달 전부터 트위터 XSS 공격 예고

 

단문형 소셜네트워킹 서비스로 유명한 트위터(Twitter.com)는 21일 악성공격자에 의한 해킹공격을 받아 포르노 사이트나 악성코드가 삽입된 사이트로 접속되는 등 사용자들의 불편이 줄을 이었다. 이번에 트위터에서 나타난 공격은 XSS(Cross-Site Scripting) 공격으로, 이 공격은 사용자로부터 입력받은 값을 검증하지 않은채 바로 실행해서 나오는 취약점이다. 공격자는 웹페이지에 XSS 공격 코드를 삽입해 악성코드 감염이나 다른 사이트로 이동시키는 등 다양한 해킹공격을 감행할 수 있다.

 

출처 : http://www.boannews.com/media/view.asp?idx=22941&kind=1

 
정말 오랜만에 찾아뵙습니다 ^-^

이번에 한번에 쫙 다 올려야겠어요 ! 

많이 시기가 지난자료이지만, 혹시나마 도움이될까하여 올립니다

 

 

럼 Part 8으로 넘어갑니당 ~

 

 

 

 

반응형

댓글