// docs / security guides / claude code checklist
Claude Code 보안 체크리스트: 26가지 항목
Claude Code(Anthropic의 CLI 에이전트)은 슬래시 명령을 통해 전체 코드베이스를 생성하고, 다중 파일 리팩토링을 관리하고, bash를 통해/writes 파일을 읽습니다. 이 체크리스트는 Claude Code의 특정 위험을 대상으로 합니다. 기본 보안 정책이 없고, 속도 제한이 거의 추가되지 않으며, <code>.claude/CLAUDE.md</code>을 보안 가드레일 파일로 사용하고, <code>.env</code> 또는 캐시된 토큰을 커밋할 위험이 있습니다. 비밀, 데이터베이스, 인증, 헤더, 배포 및 Claude Code 관련 문제에 대한 26개 항목입니다.
PRE = 사전 배포(소스 감사). DEPLOY = 배포 시. POST = 배포 후 확인. 항목 참조 FixVibe 해당되는 경우 category.check-id 형식의 ID를 확인하세요.
비밀 및 API 키(5개 항목)
Claude Code은 전체 소스 트리를 읽고 전체 파일을 출력합니다. 컨텍스트의 비밀은 출력에서 비밀이 됩니다.
- PRE — Create
.claude/CLAUDE.mdwith security policies. 추가: "Security Rules: service_role 키를 클라이언트 번들에 인라인하지 마십시오. 민감한 작업은 항상 서버 전용 엔드포인트를 통해 라우팅하십시오. NEXT_PUBLIC_* 환경 변수에 안전한 값(키나 토큰 없음)만 포함되어 있는지 확인하십시오." Claude Code는 프로젝트 안내를 위해.claude/CLAUDE.md로 읽습니다. - PRE — Ensure
.env.localis in.gitignore. Claude Code은 리팩터링 중에 실수로.env.local을 커밋할 수 있습니다.git ls-files .env*을 실행하여 추적된 내용을 확인하세요..env.local이 있으면 노출됩니다. - PRE — Audit generated API routes for env-var verification. Claude Code은(는) 사용하기 전에
process.env.SECRET이 서버측에 존재하는지 확인하는 것을 종종 잊어버립니다. 환경 변수가 누락된 경우 경로는 빠르게 실패해야 하며 기본값으로 떨어지지 않아야 합니다. - PRE — Check the
.claudecache directory. Claude Code은.claude/cache또는.claude/history에 대화 컨텍스트를 캐시합니다. 이러한 파일은 커밋하면 안 됩니다..gitignore에.claude/을 추가합니다. - POST — Run secrets.browser-storage on the deployed app. Claude Code이 키를 인라인한 경우 패시브 스캔은 렌더링된 번들에서 해당 키를 찾습니다.
데이터베이스 접근통제(4항목)
Claude Code은 스키마 생성에 탁월하지만 RLS 정책에는 명시적인 지침이 필요합니다.
- PRE — Instruct Claude Code on RLS in
.claude/CLAUDE.md. 추가: "모든 마이그레이션에는ALTER TABLE ... ENABLE ROW LEVEL SECURITY및FORCE ROW LEVEL SECURITY이 포함되어야 합니다. 모든 정책은 사용자의auth.uid()을 검증해야 합니다." - PRE — Review generated migrations for
FORCE ROW LEVEL SECURITY. Claude Code은ENABLE을(를) 생성할 수 있지만FORCE은(는) 잊어버릴 수 있습니다.FORCE이 없으면 테이블 소유자(마이그레이션 실행자)는 RLS을 우회합니다. 누락된 경우 수동으로 추가하세요. - DEPLOY — Test RLS enforcement after deploy. Supabase Studio를 열고 테이블을 선택한 다음 RLS 토글이 ON인지 확인합니다. Claude Code의 이전에서
FORCE없이ENABLE을 사용한 경우 토글은 ON으로 표시되지만 시행은 불완전합니다. - POST — Run the baas.supabase-rls active check. anon 키를 사용하여 쓰기를 시도합니다. 성공하면 RLS이 불완전합니다. 마이그레이션에
FORCE을 추가하고 재배포합니다.
인증 및 세션(4항목)
Claude Code은 인증 흐름을 잘 생성하지만 속도 제한을 자동으로 추가하거나 서버 측에서 모든 토큰 클레임을 확인하지는 않습니다.
- PRE — Mandate server-only auth verification in
.claude/CLAUDE.md. 추가: "데이터를 변경하는 모든 API 경로는 서버에서await supabase.auth.getUser()을 사용하여 사용자를 확인해야 합니다. 요청 본문에서getSession()또는 사용자 ID을 신뢰하지 마십시오." - PRE — Check generated auth handlers for token expiry. 매직 링크 및 비밀번호 재설정 토큰에는 서버 시행
expires_at이 필요합니다. Claude Code에게 질문하세요. "1시간이 지난 토큰을 거부하는 검사를 추가하세요." - PRE — Verify sign-in redirect guards.
next매개변수 리디렉션은//이 아닌/으로 시작해야 합니다..claude/CLAUDE.md에 추가: "next매개변수 유효성을 검사합니다./으로 시작해야 하며,//으로 시작하거나 프로토콜을 포함하는 경우 거부합니다." - POST — Test logout clears cookies. 로그인, 로그아웃 후 애플리케이션 → 쿠키를 확인하세요. 세션 쿠키를 지워야 합니다. 지속되면 로그아웃 엔드포인트가 상태를 삭제하지 않는 것입니다.
HTTP 헤더 및 CSP(3개 항목)
Claude Code은 사용자가 요청하지 않는 한 기본적으로 미들웨어를 생성하지 않습니다.
- PRE — Add middleware request to
.claude/CLAUDE.md. 포함: "요청별 nonce, HSTS, X-Frame-Options 및 X-Content-Type-Options 헤더를 사용하여 Content-Security-Policy으로src/middleware.ts을 생성합니다." 그런 다음 Claude Code에게 구현을 요청하세요. - PRE — Verify
src/middleware.tsexists and has CSP. Next.jssrc/레이아웃의 경우 미들웨어는 프로젝트 루트가 아닌src/middleware.ts에 있어야 합니다. CSP 헤더에'strict-dynamic'및 nonce가 포함되어 있는지 확인하세요. - POST — Run headers.security-headers on the deployed URL. 검사에서는 누락된 헤더를 보고하고 플랫폼에 대한 수정 사항을 제안합니다.
배포 위생(4개 항목)
Claude Code은 배포 플랫폼을 구성하지 않습니다. 이는 귀하의 책임이지만 확인해 볼 가치가 있습니다.
- DEPLOY — Scope env vars per environment in Vercel (or equivalent). 설정 → 환경 변수 → Production에만 각 비밀을 할당합니다.
sk_live_*을 Preview 또는 Development와 공유하지 마세요. - DEPLOY — Audit your CI workflow for secret echo. GitHub Actions 또는 다른 CI에
echo $SECRET이 있는 경우 이를 제거합니다. 빌드 로그는 보관됩니다. 로그의 비밀이 손상되었습니다. - DEPLOY — Prefer platform-native secret storage. Vercel의 설정 → 환경 변수가 암호화됩니다. GitHub Actions 비밀은 없는 것보다는 낫지만 플랫폼 기반 저장소와 일치하지 않습니다.
- POST — Rotate any key that reached a public build. 키가 Vercel 미리 보기 URL 또는 공개 아티팩트에 단 몇 초 동안 나타나면 키가 손상됩니다. 즉시 회전하십시오.
Claude Code 관련 문제(5개 항목)
Claude Code의 아키텍처 및 작업 흐름에 고유한 패턴:
- Claude Code forks work into subagents. 대규모 작업에서 Claude Code은 각각 부분적인 코드베이스 컨텍스트가 있는 여러 하위 에이전트 인스턴스를 생성할 수 있습니다. 한 하위 에이전트가 다른 하위 에이전트에는 없는 비밀 안전 패턴을 환각하면 불일치가 나타납니다. 최종 차이점을 주의 깊게 검토하세요.
- Bash operations are unverified. Claude Code bash 명령을 직접 실행합니다.
git commit -m "fix"은 편리하지만 작업 디렉터리에.env파일이 있고 glob에 해당 파일이 포함되어 있으면 커밋됩니다. Claude Code이 커밋되기 전에 항상git diff --cached을 검토하세요. - Context window boundaries create gaps. 코드베이스가 큰 경우 Claude Code의 컨텍스트가 여러 창으로 분할될 수 있습니다. 한 창의
.env.local처리가 다른 창의 처리와 다를 수 있습니다..claude/CLAUDE.md에서 정책을 시행하고 출력을 확인합니다. - Rate-limiting is almost never added without asking. Claude Code은 작동하는 CRUD을 생성하지만 속도 제한 헤더나 지수 백오프 논리를 거의 포함하지 않습니다.
.claude/CLAUDE.md으로 명시적으로 요청하세요. .claude/CLAUDE.mdis read but not enforced. Claude Code은.claude/CLAUDE.md을 제약 조건이 아닌 힌트로 읽습니다. 힌트가 작업과 충돌하는 경우 Claude Code은(는) 이를 무시할 수 있습니다. 항상 출력을 검토하십시오.
다음 단계
44개 교차 도구 항목에 대해서는 general vibe coding security checklist을 확인한 다음 배포 시간 패턴에 대해서는 step-by-step hardening을 참조하세요. Cursor도 사용하는 경우 Cursor security checklist을 참조하세요.
