전자금융기반시설 보안 취약점 평가기준 - WEB-SER-041
크로스사이트 스크립팅 (XSS) | 위험도: 4 (높음) | 통제구분: 5.8.4 서비스 보호
크로스사이트 스크립팅 (XSS) | 위험도: 4 (높음) | 통제구분: 5.8.4 서비스 보호
인터넷뱅킹 게시판 시스템
// ❌ 취약한 코드
<%
String name = request.getParameter("name");
String content = request.getParameter("content");
%>
// 입력값을 그대로 출력 (XSS 취약!)
<div>
<h3><%= name %></h3>
<p><%= content %></p>
</div>
게시글이 표시됩니다
// ✅ 안전한 코드 (JSTL 사용)
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"
prefix="c" %>
// 1. JSTL <c:out> 자동 이스케이프
<div>
<h3><c:out value="${name}" /></h3>
<p><c:out value="${content}" /></p>
</div>
// 또는 OWASP Encoder 사용
<%@ page import="org.owasp.encoder.Encode" %>
<%
String safeName = Encode.forHtml(name);
String safeContent = Encode.forHtml(content);
%>
<div>
<h3><%= safeName %></h3>
<p><%= safeContent %></p>
</div>
아래 스캐너는 실제 Burp Suite Pro가 사용하는 페이로드와 기법 카탈로그를
이 페이지 안의 가상 타겟
(https://shop.example/search?q=)에 대입해,
스캐너가 취약점을 찾아내는 과정을 실시간으로 보여준다.
방어를 켜고 같은 스캔을 다시 돌리면 같은 페이로드가 전부 차단되는 것, 그것이 방어의 증거다.
(모든 요청은 브라우저 안에서만 처리된다. 실제 네트워크 전송 없음)