Reflected XSS 대응 방안
- 해당 문서에서는 Reflected XSS 대응 방안에 대해 기술합니다.
공격 방법
- 검색 페이지에 스크립트를 입력을 통한 공격 방법입니다.
- 임의의 검색 페이지를 생성하여 공격 방법에 대해 설명하겠습니다.
- 해당 페이지는 검색어 입력 후
검색
버튼을 누르면 쿼리 스트링에 키워드 (검색어)가 추가되며,
입력된 검색어에 해당 검색어가 노출됩니다.
- “안녕”이라고 검색할 경우 URL에 쿼리 스트링이
/reflected?keyword=안녕
형식으로 추가되는 구조입니다.
- 검색어에 스크립트 코드를 작성합니다.
# 스크립트 예시
<script>alert("안녕")</script>
-> alert로 "안녕"이라는 문구를 띄우는 스크립트
- 이와 같이 keyword 쿼리 스트링에 스크립트가 포함되어 스크립트가 실행되며 alert 창이 발생합니다.
방어 방법
- Reflected XSS의 방어 방법에 대한 내용입니다.
1) 입력 값 제한
- 브라우저에서 사용자 입력 시 특수 문자를 제한합니다.
- 정규식을 활용하여 “한글”, “영어”, “숫자”, “공백”만 허용하여 스크립트가 입력되지 않을 수 있도록 제한합니다.
- XSS 공격 의도가 아닌 단순 검색을 위한 특수 문자를 입력할 수 없다는 단점이 있습니다.
2) 입력 값 치환
- 악성 스크립트를 만들 수 있는 특수 문자를 치환할 수 있는 필터를 적용합니다.
ASCII 문자 | 참조 문자 | ASCII 문자 | 참조 문자 |
---|
& | & | ” | " |
< | < | ’ | ' |
> | > | / | / |
( | ( | ) | ) |
3) 직접 출력 금지
- 사용자의 입력을 그대로 출력하는 일은 위험하므로 라이브러리의 출력 함수를 사용합니다.
소스코드
Reference
https://junhyunny.github.io/information/security/spring-mvc/reflected-cross-site-scripting/