[Spring] XSS 공격 방어하기 (lucy-xss-filter)

19·2022년 7월 25일
0

Spring

목록 보기
8/29
post-custom-banner

원인

프로젝트 배포를 했는데, XSS 공격이 가능하다는 것을 알게 되었다.
캠퍼분들과 튜터님이 게시글에 alert를 띄워놓고 난리였다..
무튼, 이걸 방어하기 위해서는 html 태그를 문자 그대로 출력되도록 해야했다.
튜터님은 프론트단에서 해줄 수 있다고 하셨는데, 우리가 방법을 못찾아서 그냥 백엔드 단에서 해보기로 했다.
캠퍼분의 도움을 받아 구현했고, lucy-xss-filter를 사용했다.


lucy-xss-filter 사용 전

| PostService.java

// 게시글 저장 부분
...
Post post = Post.builder()
        .title(postSaveRequestDto.getTitle())
        .content(postSaveRequestDto.getContent())
        .meetingType(postSaveRequestDto.getMeetingType())
        .contact(postSaveRequestDto.getContact())
        .period(postSaveRequestDto.getPeriod())
        .build();
        
...
postRepository.save(post);
...

기존 코드에서는, Dto로 넘어온 제목, 본문을 Post 객체로 만들어 Repo에 바로 저장한다.
이렇게 구현했더니 배포하니까 XSS 공격에 당해버렸따


lucy-xss-filter 사용 후

사용법은 간단하다.
1. 일단 의존성을 추가해준다.

| build.gradle

implementation 'com.navercorp.lucy:lucy-xss:1.6.3'

2. 사용하면 끝!

| PostService.java

// 게시글 저장 부분
...
Post post = Post.builder()
        .title(XssPreventer.escape(postSaveRequestDto.getTitle()))
        .content(XssPreventer.escape(postSaveRequestDto.getContent()))
        .meetingType(postSaveRequestDto.getMeetingType())
        .contact(postSaveRequestDto.getContact())
        .period(postSaveRequestDto.getPeriod())
        .build();
        
...
postRepository.save(post);
...
  • XSS 필터를 적용할 부분에 적용해서 사용한다.

XSS 필터를 적용하고 다시 테스트해보니, XSS 공격을 방어할 수 있는 걸 확인할 수 있었다.


참고

https://github.com/naver/lucy-xss-filter#usage-examples

profile
하나씩 차근차근
post-custom-banner

0개의 댓글