Dev

wargame 프로젝트 시작 (node.js, AWS EC2)

Wermut 2025. 2. 27. 02:18

 

서론

 

node.js가 구동되는 기작과 내부 원리를 이해하기 위해 CTF에서 흔히 볼 수 있는

wargame 사이트를 구축하기로 결정하였고 이에따라 2024.10.31 부터 약 2달 가량 wargame 사이트를

만들어보는 프로젝트를 시작한다.

 

그 중간 과정은 해당 블로그에 포스트할 생각이며 해당 프로젝트의 전반적인 구상도는 아래와 같다.

 


  기능 및 구현

 

권한 admin / user ( admin은 모든 게시글, 댓글 열람, 삭제 및 수정 가능, admin 권한만 admin 페이지 접근가능)
유저 관련 기능  회원 가입 및 탈퇴, 로그인 및 로그아웃, 비밀번호 찾기( 초기화 메일 전송 ), 비밀번호 변경
워게임 메인 기능 문제 업로드, 수정 및 삭제, 페이징, 제목 길이에 따라 ... 처리,
로그인 하지 않고 페이지 접근시 메인 화면으로 리다이렉트
워게임 문제 기능 문제 작성, 수정, 문제 파일 다운로드, 계층형 댓글, 오류 신고 ( admin 페이지에 report ),
난이도 투표( 1 - 10, 투표자 없을경우 난이도 0 ), 한 유저당 난이도 투표, flag 인증 한번씩 
워게임 기능 유저 관리( 유저 벤, 문제 관리 총괄, 오류 리포트 확인 ), 유저 플래그 인증 로그
(ex. f10w3r | flag{57832095734} | 2024.10.23 06:00:00 | CORRECT)
페이지 메인페이지, 워게임 페이지, 로그인 페이지, 회원가입 페이지, 문제 페이지, 문제 업로드 페이지, 
에러 페이지 ( 403, 404, 500 ), admin 페이지 등

 


ETC

 

필수 기능

  • 프론트엔드 EJS 사용
  • Node js Express 모듈 사용
  • MVC 패턴으로 개발 (controller-라우팅, view-ejs 파일들, service-비즈니스 로직 기능 구분하여 폴더 구분)
  • app.js 에서 기본 라우팅
  • DB : MySQL
  • 설정정보 : MySQL ID, PW, API Key, Port 등 .env 파일에 저장해 환경변수로 사용
  • 백엔드 서버, DB 각각의 Docker Container 위에서 작동. 
  • docker - compose.yml 파일을 사용해 두 컨테이너 하나의 명령으로 작동하도록 개발

선택 기능

  • 비밀번호 md5, SHA256 등 해싱하여 DB에 저장
  • JWT 인증 & 인가
  • git add, git commit, git push 사용해 깃허브로 코드 관리
  • web, pwn 등 remote 필요한 경우 docker로 문제 올리고 url 제공
  • 로깅 시스템