보안 감사 결과 CRITICAL 2건, HIGH 5건 발견 → 수정 완료 + 자동화 구축. [보안 수정] - issue-view.js: 하드코딩 비밀번호 → crypto.getRandomValues() 랜덤 생성 - pushSubscriptionController.js: ntfy 비밀번호 → process.env.NTFY_SUB_PASSWORD - DEPLOY-GUIDE.md/PROGRESS.md/migration SQL: 평문 비밀번호 → placeholder - docker-compose.yml/.env.example: NTFY_SUB_PASSWORD 환경변수 추가 [보안 강제 시스템 - 신규] - scripts/security-scan.sh: 8개 규칙 (CRITICAL 2, HIGH 4, MEDIUM 2) 3모드(staged/all/diff), severity, .securityignore, MEDIUM 임계값 - .githooks/pre-commit: 로컬 빠른 피드백 - .githooks/pre-receive-server.sh: Gitea 서버 최종 차단 bypass 거버넌스([SECURITY-BYPASS: 사유] + 사용자 제한 + 로그) - SECURITY-CHECKLIST.md: 10개 카테고리 자동/수동 구분 - docs/SECURITY-GUIDE.md: 운영자 가이드 (워크플로우, bypass, FAQ) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2.1 KiB
2.1 KiB
보안 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) - 환경변수 값 강도