Files
reloop-v2/.claude/state/contracts/QA-3.sprint-contract.json
reloop 40232af429 qa: breezing audit — 6 tasks, 10 critical + 9 major findings
- QA-1 Backend API contract: APPROVE (minor type contract 2)
- QA-2 Persona forget algorithm: APPROVE (math verified)
- QA-3 Auth & security: REQUEST_CHANGES
  - email normalize missing / JWT revalidate / secret fallback / whitelist
- QA-4 Frontend runtime: REQUEST_CHANGES
  - review double-submit race / subjects/[id] NaN / history error states / native alerts
- QA-5 Prisma & transactions: REQUEST_CHANGES
  - reviews.submit snapshot outside tx / tag cascade data loss / iteration race
- QA-6 Build & deploy: REQUEST_CHANGES
  - missing migrations, postinstall, lockfile, PM2 ecosystem

Follow-up fix proposals saved to .claude/state/pending-fix-proposals.jsonl (18 tickets)
2026-04-11 23:58:37 +09:00

30 lines
1.1 KiB
JSON

{
"task_id": "QA-3",
"title": "Auth & security review",
"goal": "인증/보안 관련 OWASP 주요 취약점 전수 검증",
"checks": [
"JWT 발급 (auth.service) — secret env 처리, expiresIn, payload 구성",
"bcrypt hash round",
"passport-jwt 전략 (jwt.strategy.ts) — 토큰 파싱, 사용자 조회 누락 여부",
"JwtAuthGuard 적용 범위: 모든 controller",
"public route: /auth/register, /auth/login, /health 만 열림",
"helmet/main.ts CORS origin 설정이 env로 제어되는지",
"global ValidationPipe whitelist/forbidNonWhitelisted",
"frontend setToken/getToken 저장 위치 (localStorage 여부, XSS 노출)",
"401 rebound의 무한 루프 가능성",
"비밀번호 최소 길이 / email 정규화",
"study-logs/reviews/stats/me 에서 userId 검증 (ownership)",
".env 샘플 파일 유무 / secret leak 가능성"
],
"non_goals": [
"pentest",
"보안 헤더 새로 추가",
"JWT 대체 제안"
],
"runtime_validation": [],
"browser_validation": [],
"risk_flags": ["security-sensitive"],
"reviewer_profile": "static",
"deliverable": ".qa/QA-3.md"
}