- 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)
30 lines
1.1 KiB
JSON
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"
|
|
}
|