728x90

오늘 매우 화가 나는 일이 있었다.

예전에 피드백을 요청하느라 모 커뮤니티에 내 프로젝트 링크를 올렸는데, 그걸 보고 들어왔는지, 

XX가즈아~ 라면서 같은 글을 100개 넘게 작성한 사람이 있었다. 

한 번은 어그로구나 싶어서 삭제를 다 했는데, 하루 종일 같은 짓을 반복하길래 매우 화가났다. 

내 프로젝트 보안이 그만큼 약하구나 느꼈고 ip를 차단하는 방법을 검색해서 프로젝트에 적용시켰다.


우선 IpBanList라는 엔티티를 새로 만들었다.

이 엔티티는 차단할 ip를 저장한다. 내 프로젝트에 접속해 글을 작성한 작성자의 ip가 이 테이블에 있는 ip와 같으면 더 이상 작성하지 못하도록 인터셉터를 적용한다.

 

이 엔티티에 맞게 IpBanService와 IpBanRepository도 작성한다.

아래 코드는 IpBanService의 코드이다.

아래에서부터, request에서 ip를 뽑아내는 메서드, 해당 ip가 차단되었는지를 판별하는 메소드, 해당 ip를 차단하는 메소드이다.

 

Ip 엔티티 관련 기능은 다 구현했다. 

이제 어디서 차단하느냐가 남았다.

 

글을 작성하는 PostController에서 차단할것이다.

아래 코드는 글을 작성하는 writePost의 일부분이다.

로그인한 사용자가 오늘 작성한 글의 수를 구해서, 5번째 글을 작성하려고 하면 해당 ip를 차단한다.

 

ip 자체를 차단하는 것이기 때문에 탈퇴하고 다른 아이디로 다시 가입해도 소용없다. 

 

내친김에 인터셉터까지 작성한다.

해당 ip가 차단된 ip면 인터셉터가 작동해서 연결을 다른 곳으로 돌린다.

 

 

구현을 마치고 배포를 한 후 글을 여러개 작성해 내 ip를 차단시켜봤다.

잘 작동한다.

DB를 확인해보자. 내 IP가 제대로 저장되었다.

 

프로젝트 전체 코드가 궁금한 사람은 아래 github에서 확인해보자. https://github.com/chosh95/Songstagram

 

chosh95/Songstagram

Spring Boot로 만들어보는 음악 SNS. Contribute to chosh95/Songstagram development by creating an account on GitHub.

github.com

 


다 구현하고 보니 별 거 없는 것 같지만, 2시부터 5시간동안 코딩테스트를 치르고, 이 일을 발견해서 뇌가 터지겠는걸 간신히 막고 구현을 했다. 화도 나고 당황스러웠지만, 서비스 제공이 얼마나 까다롭고 힘들 지 경험해봤고, 보안이 참 중요하겠다고 느꼈다.

728x90

+ Recent posts