WhiteHat School 시큐어 코딩 과제. 중고거래 플랫폼(Flask + SQLite + Socket.IO)에 시큐어 코딩 원칙을 적용하여 구현하였습니다.
- 회원가입 / 로그인 (계정 잠금, 세션 만료)
- 프로필 관리 (소개글 수정, 비밀번호 변경 - 재인증)
- 상품 등록 / 조회 / 검색 / 수정 / 삭제 (소유자 확인)
- 실시간 전체 채팅 + 1:1 채팅 (Socket.IO)
- 신고 기능 (사용자/상품, 중복·남용 방지, 누적 시 자동 차단/휴면)
- 유저 간 송금 (잔액 기반)
- 관리자 대시보드 (사용자/상품/신고 전체 관리)
https://docs.anaconda.com/free/miniconda/index.html
git clone <이 레포지토리 URL>
cd secure-coding
conda env create -f enviroments.yaml
conda activate secure_coding또는 pip만 사용하는 경우:
pip install -r requirements.txt운영 환경으로 배포할 경우 아래 환경변수를 설정하는 것을 권장합니다.
export SECRET_KEY="<임의의 긴 랜덤 문자열>"
export FLASK_ENV=production # HTTPS 환경에서 Secure 쿠키 플래그 및 HSTS 헤더 활성화
export FLASK_DEBUG=0 # 디버그 모드 비활성화 (스택트레이스 노출 방지)환경변수를 설정하지 않으면 개발 모드(SECRET_KEY 랜덤 생성, debug 모드 활성화)로 동작합니다.
python app.py최초 실행 시 market.db SQLite 파일이 자동 생성됩니다.
브라우저에서 http://127.0.0.1:5000 접속.
가장 먼저 회원가입하는 계정이 자동으로 관리자(admin) 권한을 갖습니다. (관리자 계정으로 상단 메뉴의 "관리자" 페이지에서 사용자/상품/신고를 관리할 수 있습니다.)
외부에서 접속 테스트를 하려면 ngrok을 사용할 수 있습니다.
# optional
sudo snap install ngrok
ngrok http 5000기존 데이터를 초기화하고 싶다면 market.db 파일을 삭제한 뒤 다시 python app.py를 실행하세요.
secure_coding_checklist.csv 파일에 보안 요소별 적용 여부와 구현 위치를 정리했습니다.