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 제공
- 로깅 시스템