일지이기 때문에 일기의 성격이 더 강합니다.

지난 시간에 이어서, 이번엔 저장형 XSS를 다룬다.
저장형 XSS
저장형 XSS는 공격 내용이 들어가 있는 스크립트를 DB가 저장하여, 다른 이용자가 해당 페이지(주로 게시판 게시글이 된다)를 열었을 때 그대로 스크립트가 실행되어 공격을 받는 것을 의미한다. 그렇기 때문에 이를 방지하기 위해서는 보통의 경우 스크립트를 이스케이프 처리를 해야한다. JAVA의 경우 C:OUT을 사용하고 있다. 수업에서는 이것을 JSTL과 함께 사용했다.
c:out은 escapeXml이 기본적으로 true 값이기 때문에 escape 처리를 해준다. 만약 escape 처리가 필요 없다면 명시적으로 false 처리를 해야하지만, 추천하지는 않는다.
<c:out value='<%= %>'>
그리고 출력 전에 이스케이프 형태로 저장(혹은 스크립트는 저장하지 못하도록 처리)하는 것 또한 방지 방법이 된다.
DOM XSS
DOM XSS는 DOM 구조를 통하여 요소를 수정, 추가, 이동 등을 할 때 js를 넣어 공격한다.
주소창의 매개 변수에 javascript:를 넣어 사용하거나 <script>를 사용하여 공격한다. 우리의 경우 #로 시작하는 해시값을 사용하여 이 DOM XSS를 실험해보았다.
이 경우 해결 방법으로는 매개변수 값의 검증이 있다. 해당 값을 검증하여 이스케이프하거나 필터링하는 등의 방식으로 방지할 수 있다.
MD5 해싱
MD5 암호는 한때 사용하였던 암호화(정확히는 해싱) 기법으로, 해시 중 하나이다. 현재는 권장되지 않고, SHA256 등을 권장하고 있다. MD5 암호화를 사용하는 법은 다음과 같다.
public static String md5(String pass) {
String encData = "";
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] bytes = pass.getBytes();
md.update(bytes);
byte[] digest = md.digest();
System.out.println("byte 타입 해시값 : " + digest);
for (int i = 0; i < digest.length; i++) {
encData += Integer.toHexString(digest[i] & 0xff);
}
System.out.println(encData);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return encData;
}
들어온 pasword를 getBytes()를 통해 바이트 배열로 바꾸어 받아온다. 그리고 md에 update 메서드를 사용, MessageDigest 안에 넣는다. md.digest를 통해 최종 해시값을 계산, 이것을 byte[] digest로 저장한다. 이후 배열을 사람이 볼 수 있도록 Integer.toHexString을 통해 16진수로 변환한다.
이 MD5 클래스를 생성해서 사용하면 되는데, 중요한 건 해시는 단방향 암호화이기 때문에 복호화는 불가능하다. 즉, MD5 형태로 저장했을 경우, 검증 과정 또한 같은 MD5를 거쳐야 비교 및 통과가 가능하다.
'부트캠프 일지 > Java 풀스택 과정 강의' 카테고리의 다른 글
| [Java 풀스택 과정 강의] 3월 18일 (0) | 2026.03.19 |
|---|---|
| [Java 풀스택 과정 강의] 3월 17일 (0) | 2026.03.19 |
| [Java 풀스택 과정 강의] 3월 13일 (0) | 2026.03.14 |
| [Java 풀스택 과정 강의] 3월 12일 (0) | 2026.03.14 |
| [Java 풀스택 과정 강의] 3월 11일 (0) | 2026.03.14 |