- 비밀번호 원문을 저장하지 않고 Django 인증 기능 사용
- 비밀번호 길이·유사도·흔한 비밀번호 검사
- 로그인 연속 실패 제한
- 운영 로그인 실패 횟수를 Redis 공유 캐시에 저장하도록 설정
- 로그아웃을 POST 요청으로 처리
- 세션 쿠키
HttpOnly,SameSite=Lax - 운영 환경에서 세션·CSRF 쿠키
Secure
- 상품 등록·수정·삭제에 로그인 요구
- 상품 수정·삭제 시 판매자 소유권 재검사
- 구매 요청 처리는 상품 판매자만 가능
- 결제는 승인된 구매 요청의 구매자만 가능
- 구매 확정·환불은 해당 구매자만 가능
- 비공개 대화와 결제 영수증은 당사자만 열람
- 관리자 페이지는 staff 권한 요구
- 관리자 교차 모델 액션은 실제 변경 대상 모델 권한을 별도로 요구
- 계좌번호 전체 값은 저장하지 않고 끝 4자리와 임의 연결 토큰만 저장
- 계좌 연결·변경과 결제 전에 현재 비밀번호 재확인
- 결제 금액을 클라이언트 입력이 아닌 상품 가격으로 결정
- 판매자는 검증된 정산 계좌가 있어야 구매 요청 승인 가능
- 일회성 주문 UUID와 구매 요청별 결제 유일 제약으로 이중 결제 방지
- 결제·구매·상품 상태를 하나의 트랜잭션에서 변경
- 결제 완료 후 구매 확정 전에는 연결 계좌 해제 차단
- 결제 원장은 관리자도 임의 추가·삭제할 수 없도록 제한
- 결제·정산·환불 시각과 상태 보존
- 실제 은행 API의 서명 검증·웹훅 재전송·멱등 키 검증
- 실제 결제대행사 토큰과 계좌 실명확인 연동
- Django Form으로 길이·형식·범위 검사
- ORM을 사용해 SQL Injection 방어
- 템플릿 자동 이스케이프로 XSS 방어
- CSP·클릭재킹·MIME 스니핑 방지 헤더
- 정렬 조건 허용 목록 적용
- 이미지 입력 크기·픽셀 수·실제 형식·예상 디코딩 메모리·변환 결과 크기 검사
- 이미지 재인코딩과 무작위 파일명
- 상태 변경 요청에 POST 사용
- CSRF 미들웨어와 토큰 사용
- 구매 승인·결제·구매 확정·환불에 트랜잭션과 행 잠금 사용
- 상품 수정에 행 잠금 사용, 상품별 승인·완료 거래 1개 DB 제약
- 예약 또는 판매 완료된 상품 수정 차단
- 승인·결제·정산 직전에 상품·계정·차단 상태 재검사
- 구매 확정 전 취소 시 결제 환불과 상품 판매 상태 복구
- 운영용 설정 파일 분리
- 운영 비밀키 환경변수 사용
- 운영 WSGI/ASGI 기본 설정을 fail-closed로 구성
- HTTPS 리다이렉트·HSTS 설정
- 알 수 없는 주소의 기술적 URL 목록 노출 방지
-
.env, DB, 업로드 파일, 가상환경 Git 제외 - GitHub Actions 자동 테스트와 외부 액션 전체 커밋 SHA 고정
- 관리자 신고·상품 차단 처리자 로그
- 실제 배포 시 PostgreSQL로 변경
- 실제 Redis 서비스의 인증·네트워크 제한·고가용성·복구 통합 테스트
- 업로드 악성코드 검사와 별도 미디어 도메인 적용
- 정기 백업 및 복구 테스트
- 결제 웹훅·관리자 조작·환불 감사 로그의 중앙 수집과 경보 연동
체크되지 않은 항목은 실제 금융 API와 운영 인프라를 연결할 때 반드시 추가로 구현하고 검증해야 한다.