security: 보안 강제 시스템 구축 + 하드코딩 비밀번호 제거
보안 감사 결과 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>
This commit is contained in:
39
SECURITY-CHECKLIST.md
Normal file
39
SECURITY-CHECKLIST.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# 보안 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`)
|
||||
- 환경변수 값 강도
|
||||
Reference in New Issue
Block a user