# 보안 PR 체크리스트 — TK Factory Services > 공통 원칙: `claude-config/memory/feedback_security_pr_checklist.md` > 자동 검증: `scripts/security-scan.sh` (pre-commit + pre-receive) ## 체크리스트 | # | 카테고리 | 검증 | 확인 항목 | 참조 파일 | |---|---------|------|----------|----------| | 1 | 비밀 정보 | **자동** #1,#2 | 코드/문서에 비밀번호·토큰·API키 하드코딩 없음 | `.env.example` | | 2 | 인증 | 수동 | 모든 라우트에 `requireAuth` 적용 | `shared/middleware/auth.js` | | 3 | 권한 RBAC | 수동 | 쓰기(POST/PUT/DELETE)에 `requirePage()` 또는 `requireRole()` | `shared/middleware/pagePermission.js` | | 4 | 입력 검증 | 수동 | path traversal(`../`), 타입, 길이 검증 | `system1-factory/api/utils/validator.js` | | 5 | 파일 업로드 | 수동 | magic number + 확장자 + MIME + 크기 제한 | `system1-factory/api/utils/fileUploadSecurity.js` | | 6 | 네트워크 | **자동** #5 | CORS 와일드카드 없음, rate limiting 적용 | `system1-factory/api/config/cors.js` | | 7 | DB 쿼리 | **자동** #6 | 파라미터화(`?`), `await`, `COALESCE` 패턴 | CLAUDE.md 주의사항 | | 8 | 에러/로그 | **자동** #7 | 로그에 비밀정보 없음, 스택트레이스 prod 비노출 | `shared/utils/errors.js` | | 9 | 보안 헤더 | 수동 | CSP, HSTS, X-Frame-Options | `system1-factory/api/config/security.js` | | 10 | 자동 검증 | **자동** | pre-commit + pre-receive 통과 | `scripts/security-scan.sh` | ## 자동 검출 규칙 | 규칙# | 이름 | 심각도 | 동작 | |-------|------|--------|------| | 1 | SECRET_HARDCODE | CRITICAL | 차단 | | 2 | SECRET_KNOWN | CRITICAL | 차단 | | 3 | LOCALSTORAGE_AUTH | HIGH | 차단 | | 4 | INNERHTML_XSS | HIGH | 차단 | | 5 | CORS_WILDCARD | HIGH | 차단 | | 6 | SQL_INTERPOLATION | HIGH | 차단 | | 7 | LOG_SECRET | MEDIUM | 경고 (5개 초과 시 차단) | | 8 | ENV_HARDCODE | MEDIUM | 경고 (5개 초과 시 차단) | ## 수동 확인 필요 항목 (자동화 한계) - RBAC 설계 오류 / 인증 흐름 - 비즈니스 로직 / race condition - third-party dependency 취약점 (`npm audit`) - 환경변수 값 강도