크로스사이트 스크립트 편집하기
IT위키
편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 | 당신의 편집 | ||
34번째 줄: | 34번째 줄: | ||
== 코드 예제== | == 코드 예제== | ||
=== 안전하지 않은 코드 === | |||
파라미터(id)에 <script>alert(document.cookie);</script>와 같은 스크립트 코드가 입력되고, 이 값을 그대로 출력에 사용하는 경우, 공격자는 공격코드를 이용하여 피해자의 쿠키정보를 빼돌릴 수 있다. | |||
<syntaxhighlight lang="java"> | |||
<% String customerID = request.getParameter(“id”); %> | <% String customerID = request.getParameter(“id”); %> | ||
요청한 사용자: <%=customerID%> | 요청한 사용자: <%=customerID%> | ||
43번째 줄: | 43번째 줄: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== 안전한 코드 === | |||
서버의 처리 결과를 사용자 화면에 출력하는 경우, 문자열 치환 함수를 이용하여 출력값을 HTML 인코딩하거나, JSTL을 이용하여 출력 또는 잘 만들어진 외부 XSSFilter 라이브러리를 활용하여 출력하는 것이 안전하다. | |||
<syntaxhighlight lang="java"> | |||
// 방법1. 서블릿에서 출력값에 HTML인코딩 | // 방법1. 서블릿에서 출력값에 HTML인코딩 | ||
String cleanData = input.replaceAll(“<”, “<”).replaceAll(“>”, “>”); | String cleanData = input.replaceAll(“<”, “<”).replaceAll(“>”, “>”); | ||
60번째 줄: | 60번째 줄: | ||
XssFilter filter = XssFilter.getInstance(“lucy-xss-superset.xml”); | XssFilter filter = XssFilter.getInstance(“lucy-xss-superset.xml”); | ||
out.append(filter.doFilter(data)); | out.append(filter.doFilter(data)); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==출처== | ==출처== | ||
* [https://www.kisa.or.kr/main.jsp KISA, 전자정부 SW 개발·운영자를 위한 소프트웨어 개발보안 가이드] | * [https://www.kisa.or.kr/main.jsp KISA, 전자정부 SW 개발·운영자를 위한 소프트웨어 개발보안 가이드] |