Notice
Recent Posts
Recent Comments
Link
Tags
- NoSQL
- XALZ 압축해제
- DOM
- Directory traversal
- HacktheBox Mobile
- JAVA ClassLoader 취약점
- UnCrackable
- JSP
- HackTheBox
- mstg
- CVE-2022-22965
- CVE-2014-0094
- getCachedIntrospectionResults
- blind sql injection
- PortSwigger
- Xamarin 분석
- File Upload
- Android 6.0
- nginx
- xss
- HackTheBox APKey
- UnCrackable level 1
- CVE-2010-1622
- mongoDB
- MariaDB
- Android Backup
- login form
- Frida
- Hackthebox cat
- SeeTheSharpFlag
Archives
- Today
- Total
끄적끄적
[XSS 대응] 웹 서버 구축하기 (23) 본문
개요
- XSS 대응를 위해 view.jsp 파일 수정
환경
- WAS Server: CentOS Linux release 7.9 - Tomcat 7.0 - JDK 1.8.0_312
- DB Server: CentOS Linux release 7.9 - MariaDB(10.4)
실습
기존 view.jsp 파일에서 XSS가 발생하는 부분
view.jsp
bbs.getBbsContent()에서 사용자의 입력을 그대로 출력하기 때문에 XSS 발생
<tr>
<td>내용</td>
<td colspan="2" style="min-height:200px; text-align:left;"><%= bbs.getBbsContent()%></td>
</tr>
XSS구문: <script>alert("");</script>
Blacklist 필터링 적용: replaceAll() 사용
view.jsp
<tr>
<td>내용</td>
<td colspan="2" style="min-height:200px; text-align:left;"><%= bbs.getBbsContent().replaceAll(" ", " ").replaceAll("<","<").replaceAll(">",">").replaceAll("\n","<br>;")%></td>
</tr>
게시글이 문자열로 출력됨
본 예제와 같은 개인이 구성하는 웹 서버에서는 많지 않은 JSP 파일과 사용자의 접속이 많지 않아 Blacklist 필터링을 적용하여 처리하였다.
사용자의 요청이 적고, 다수의 JSP 파일이 존재하는 경우에는 Servlet Filter단에서 htmlentities Encoding을 적용하고 필요한 태그에 경우 해당 jsp 페이지에서 허용처리를 하는 Whitelist 필터링 방식 사용하는 것(NodeJS의 경우 sanitize-html 라이브러리 사용)이 유용할 것으로 보인다.
반대로, 다수의 사용자 요청이 존재하는 웹서버의 경우 단일 서버에서 Servlet Filter에서 사용자의 입력 값을 검증할 경우, 오버헤드가 발생할 수 있어 JSP단에서 htmlentities Encoding을 사용하는 대응 방안이 필요할 것으로 보인다.
'Development > JSP' 카테고리의 다른 글
[게시글 조회/삭제/댓글/수정] 웹 서버 구축하기 (22) (0) | 2022.01.13 |
---|---|
[게시판 글쓰기&목록 출력] 웹 서버 구축하기 (21) (0) | 2022.01.10 |
[게시판 제작] 웹 서버 구축하기 (20) (0) | 2022.01.10 |
[로그인&로그아웃 기능 구현] 웹 서버 구축하기 (19) (0) | 2022.01.07 |
[회원 가입 페이지와 DB연동] 웹 서버 구축하기 (18) (0) | 2022.01.06 |
Comments