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:
Hyungi Ahn
2026-04-10 09:44:21 +09:00
parent bbffa47a9d
commit ba9ef32808
257 changed files with 786 additions and 18 deletions

24
.securityignore Normal file
View File

@@ -0,0 +1,24 @@
# =============================================================================
# .securityignore — 보안 스캔 제외 목록
# =============================================================================
# 규칙:
# - 모든 항목에 사유 주석 필수 (없으면 경고)
# - 월 1회 정기 검토 → 불필요 항목 제거
# - 날짜 표기 권장
# =============================================================================
# 스캔 스크립트 자체 (규칙 패턴 포함)
scripts/security-scan.sh # 규칙 정의 자체 (2026-04-10)
.githooks/pre-receive-server.sh # 규칙 정의 자체 (2026-04-10)
# 환경변수 템플릿 (placeholder만 포함)
.env.example # placeholder 값만 (2026-04-10)
# 보안 감사 보고서 (발견된 패턴 인용)
SECURITY-AUDIT-20260402.md # 감사 보고서 인용 (2026-04-10)
SECURITY-FINDINGS-SUMMARY.txt # 감사 요약 인용 (2026-04-10)
SECURITY-CODE-SNIPPETS.md # 코드 스니펫 인용 (2026-04-10)
# 보안 가이드/체크리스트 (규칙 예시 포함)
SECURITY-CHECKLIST.md # 규칙 참조 예시 (2026-04-10)
docs/SECURITY-GUIDE.md # 가이드 예시 코드 (2026-04-10)