XSS 란?
- XSS (Cross Site Script)
- 서버로 보내는 입력값에 자바스크립트를 보내서 다른 사용자에게 자신이 만든 스크립트를 실행시키도록 하는 행위
- 따라서, 사용자의 입력이 있는 기능에는 XSS 에 대한 필터링 처리가 되어 있어야 한다.
- 아무 입력에서나 아래와 같이 작성 후 글을 열었을때 스크립트가 실행된다면 해당 서비스는 XSS 필터링 처리가 되어 안되어 있는 것이다.
<'script>alert('script ok');</'script>
일반적인 XSS Filter 구현
- form-data 에 대한 XSS Filter 처리
- 보통 Naver 에서 만든 Lucy Filter 활용
- JSON 포맷의 REST 서비스에서 구현이 필요한 경우
- Jsckson 의 ObjectMapper 를 통해 Response 의 json 문자열 생성시 스크립트에 대한 Escape 처리
- 관련 참조 링크
특정 요청 필드에 대해서만 XSS Filter 적용
- 필자의 상황 예시
- 프론트와 백엔드가 분리되어 있는 서비스에서 백엔드 API 서비스를 개발
(JSON 포맷의 REST API 서버)
- 대부분 어드민에서 태그가 포함되어 작성된 컨텐츠(에디터를 통해 꾸며진)을 프론트엔드에 제공
- form-data 도 아니었고, 전체 응답에 XSS 필터링 처리는 맞지 않은 상황
- 전체 응답에 대해 XSS 필터링 처리하게 되면 프론트엔드에서 한번더 태그로 변환하여 보여줘야 했으며
- 사용자의 입력도 일부 기능에서만 행해짐
- 특정 요청 필드에 대해서만 XSS 필터링 처리하는 방법
- XSS 필터링하는 @JsonDeserializer 정의
- 대상 DTO 의 필드에 적용
- 관련 참조 링크
태그 Escape 하는 방법
- org.springframework.web.util.HtmlUtils
// < 기호를 <로, & 기호를 &로 바꾸는 등의 처리
String htmlEscape(String input);