# 어드바이저 검토: 보안성 (Security) > **ISO/IEC 25010 보안성 = 기밀성 + 무결성 + 부인방지 + 책임추적성 + 진정성** --- ## 현재 구현 수준: 🟢 92점 / 100점 --- ## 잘 구현된 항목 ✅ | 항목 | 구현 내용 | 파일 | |------|---------|------| | 인증/인가 | JWT Bearer + RBAC | `core/auth.py` | | 다단계 인증 | TOTP/OTP MFA | `routers/auth.py` | | 비밀번호 보안 | bcrypt 해시 + 5회 잠금 | `core/auth.py` | | 암호화 통신 | AES-256-GCM | `core/license.py` | | 감사 로그 | SHA-256 해시체인 불변 로그 | `routers/audit.py` | | 시큐어코딩 | 자동 점검 API | `core/compliance_check.py` | | PAM | 특권 접근 관리 | `routers/pam.py` | | SQL 인젝션 방지 | ORM 파라미터 바인딩 | `SQLAlchemy` | | CSRF 방지 | SameSite 쿠키 | 미들웨어 | | 개인정보보호 | PIPA 자동 점검 | `compliance_check.py` | | Zero Trust | 세션 재검증 | `routers/infra_ext.py` | --- ## 보완 필요 항목 ⚠️ ### [보안-1] HTTPS 강제 적용 미설정 **현재:** HTTP 허용 (개발 편의) **GS 기준:** 기밀성 — 전송 데이터 암호화 필수 **해결:** ```python # main.py 미들웨어 추가 from fastapi.middleware.httpsredirect import HTTPSRedirectMiddleware # 운영 환경에서만 활성화 if os.getenv("FORCE_HTTPS", "false").lower() == "true": app.add_middleware(HTTPSRedirectMiddleware) ``` ```nginx # Nginx에 HSTS 헤더 추가 add_header Strict-Transport-Security "max-age=31536000" always; ``` --- ### [보안-2] API Rate Limiting 설정 불충분 **현재:** slowapi 사용하나 로그인 엔드포인트 제한 미흡 **GS 기준:** 부인방지 — 브루트포스 공격 방지 **해결:** ```python # 로그인 API: 분당 5회 제한 @limiter.limit("5/minute") @router.post("/api/auth/login") ``` --- ### [보안-3] 세션 타임아웃 설정 미흡 **현재:** JWT 만료 480분 (8시간) — 공공기관 기준 초과 **GS 기준:** 일반적으로 30분~2시간 권장 **해결:** ```yaml # application.yml ACCESS_TOKEN_EXPIRE_MINUTES: 120 # 2시간으로 변경 IDLE_TIMEOUT_MINUTES: 30 # 비활동 30분 후 만료 ``` --- ### [보안-4] 파일 업로드 보안 미흡 **현재:** 파일 확장자 검증 없음 (attachments API) **GS 기준:** 무결성 — 악성 파일 업로드 차단 **해결:** ```python ALLOWED_EXTENSIONS = {".pdf", ".docx", ".xlsx", ".png", ".jpg", ".zip"} if Path(filename).suffix.lower() not in ALLOWED_EXTENSIONS: raise HTTPException(400, "허용되지 않는 파일 형식입니다.") ``` --- ## 보안 체크리스트 ``` ✅ JWT 인증 ✅ RBAC 권한 제어 ✅ MFA/OTP ✅ 비밀번호 해시 (bcrypt) ✅ SQL 인젝션 방지 (ORM) ✅ XSS 방지 (입력값 이스케이프) ✅ AES-256-GCM 암호화 ✅ 감사 로그 해시체인 ⚠️ HTTPS 강제화 (설정 필요) ⚠️ Rate Limiting 강화 ⚠️ 세션 타임아웃 단축 ⚠️ 파일 업로드 검증 ```