FixVibe

// docs / security guides / cursor checklist

Cursor 보안 체크리스트: 출시 전 28가지 항목

Cursor으로 구축하시나요? Cursor의 자동 완성, 작성기 모드 및 에이전트 기능은 매우 강력하며 예측 가능한 보안 사각지대를 만듭니다. 이 체크리스트는 서비스 역할 키 인라이닝, 검토 없이 Composer에서 생성한 전체 파일, 에이전트 모드 터미널 명령, 첫 번째 보안 가드레일인 <code>.cursorrules</code> 파일 등 Cursor 특정 패턴을 대상으로 합니다. 비밀, 데이터베이스, 인증, 헤더, 배포 및 Cursor 관련 문제에 대한 28개 항목입니다.

PRE = 사전 배포(소스 감사). DEPLOY = 배포 시. POST = 배포 후 확인. 항목 참조 FixVibe 해당되는 경우 category.check-id 형식의 ID를 확인하세요.

비밀 및 API 키(5개 항목)

Cursor의 자동 완성 기능은 비밀이 일반적인 오픈 소스 코드에서 학습되었습니다. 모델은 특히 인증 시도가 실패한 후에 자유롭게 이를 제안합니다.

  1. PRE — Write security rules into .cursorrules. 다음 줄을 추가합니다. "SUPABASE_SERVICE_ROLE_KEY, sk_live_* 또는 공급자 약어로 시작하는 환경 변수를 클라이언트측 코드에 인라인하지 마십시오. 항상 서버 전용 가져오기를 사용하십시오." Cursor은 .cursorrules을 읽고 이를 모든 제안에 고려합니다.
  2. PRE — Audit Composer-generated files. Cursor의 Composer가 전체 파일(특히 인증 처리기)을 생성할 때 한 줄씩 검토합니다. Composer는 때때로 서버 전용으로 유지되어야 하는 환경 변수를 인라인합니다. NEXT_PUBLIC_을 찾거나 구성요소 가져오기에서 서비스 키에 대한 직접 참조를 찾으세요.
  3. PRE — Reject auto-imports of service clients into client components. Composer가 import { supabase } from '@/lib/supabase/service'을 React 파일로 가져오는 경우 즉시 삭제하고 대신 API 엔드포인트를 통해 라우팅하세요. 서버 전용 가져오기는 명시적으로 표시되어 있으므로 건너뛰지 마십시오.
  4. PRE — Scan Agent-mode commits. 에이전트 모드는 터미널 명령을 실행하고 직접 커밋할 수 있습니다. 에이전트 실행 중에 비밀로 보이는 문자열이 커밋되지 않았는지 확인하기 위해 git log --oneline -20git diff HEAD~5을 감사합니다.
  5. POST — Run secrets.browser-storage. 배포된 URL에 대한 수동 검색입니다. JS 번들에 서비스 키가 나타나면 즉시 교체하세요. Cursor의 자동 완성 기능이 서비스 키를 인라인했을 가능성이 높습니다.

데이터베이스 접근통제(4항목)

Composer는 종종 작동하는 인증 코드를 생성하지만 RLS을 건너뜁니다. "작동하는" 순간에는 사람들이 누락된 정책 시행을 보지 못하게 됩니다.

  1. PRE — Force Cursor to generate migrations with RLS. .cursorrules: "모든 CREATE TABLE public.* 마이그레이션에는 ALTER TABLE ... ENABLE ROW LEVEL SECURITYFORCE ROW LEVEL SECURITY이 포함되어야 합니다." 그런 다음 Composer에게 마이그레이션을 생성하도록 요청합니다.
  2. PRE — Review Composer-generated policies. Composer는 auth.uid()을 확인하지 않고 정책을 작성하는 경우가 있습니다. using 절이 없는 allow select on public.items과 같은 정책은 위험할 정도로 광범위합니다. user_id 일치가 필요합니다.
  3. DEPLOY — Confirm FORCE ROW LEVEL SECURITY is live. Supabase Studio를 열고 각 테이블의 RLS 토글을 확인하세요. Composer의 마이그레이션에 ENABLE이 있었지만 FORCE을 잊어버린 경우 테이블 소유자(마이그레이션)는 RLS을 우회합니다. 이것은 진짜 격차입니다.
  4. POST — Run the baas.supabase-rls active check. anon 키를 사용하여 쓰기를 시도합니다. 성공하면 RLS이 실제로 적용되지 않습니다. FORCE 키워드가 누락되었을 가능성이 높습니다.

인증 및 세션(4항목)

Cursor은 인증 흐름을 빠르게 생성하지만 토큰을 안전하게 유지하는 미묘한 서버 측 유효성 검사를 놓치는 경우가 많습니다.

  1. PRE — Ensure all auth routes use getUser(). API 경로에서 getSession()을 검색하고 await supabase.auth.getUser()으로 바꿉니다. getSession()은 확인되지 않은 쿠키를 읽습니다. getUser()은 Supabase 백엔드로 유효성을 검사합니다.
  2. PRE — Check Composer auth handlers for token expiry. 매직링크 토큰에는 서버 시행 expires_at이 필요합니다. 기본 Supabase은 1시간입니다. 실제 이유 없이 Cursor에 재정의하도록 요청하지 마세요.
  3. PRE — Audit the sign-in redirect guard. 로그인 후 next 쿼리 매개변수 리디렉션을 확인해야 합니다. /으로 시작해야 하며 //은 안 됩니다. 작곡가는 때때로 이것을 건너뜁니다. 누락된 경우 수동으로 추가하세요.
  4. POST — Test logout server-side state destruction. 로그인, 로그아웃하고 쿠키를 검사합니다(DevTools → 애플리케이션 → 쿠키). 세션 쿠키는 즉시 삭제되어야 합니다. 지속되면 로그아웃 핸들러가 상태를 파괴하지 않는 것입니다.

HTTP 보안 헤더 및 CSP(3개 항목)

Cursor은 기본적으로 미들웨어를 거의 생성하지 않습니다. 명시적으로 요청하지 않으면 일반적으로 CSP 및 HSTS이 없습니다.

  1. PRE — Demand CSP in .cursorrules. 추가: "Content-Security-Policy을 사용하여 src/middleware.ts을 생성합니다. unsafe-inline이 아닌 script-src에 nonce를 사용합니다." 그런 다음 Cursor에게 생성을 요청하세요. 이 힌트가 없으면 미들웨어를 건너뜁니다.
  2. PRE — Verify src/middleware.ts exists. src/ 디렉터리 레이아웃에서는 Next.js이 src/middleware.ts만 선택합니다. 루트 수준 middleware.ts은 자동으로 무시됩니다. CSP이 착륙하지 않으면 파일이 올바른 위치에 있는지 확인하세요.
  3. POST — Run headers.security-headers. 수동 검색에서 CSP, HSTS, X-Frame-Options, X-Content-Type-Options가 누락되었다고 보고합니다. 보고서를 열고 배포 플랫폼에 대한 수정 지침을 따르세요.

배포 위생(5개 항목)

Cursor 앱은 기본값이 좋지만 build/deploy 경계에 대한 명시적인 강화가 필요한 Vercel에 착륙하는 경우가 많습니다.

  1. DEPLOY — Check Vercel env-var scoping. 설정 → 환경 변수 → 각 비밀의 범위는 Production으로만 지정되어야 합니다. sk_live_*을 Preview 또는 Development와 공유하지 마세요.
  2. DEPLOY — Disable build-log secret echo. vercel.json 또는 GitHub 작업 워크플로에 echo $SECRET이 있는 경우 이를 제거합니다. 빌드 로그는 공개적으로 보관됩니다. 로그의 비밀이 손상되었습니다.
  3. DEPLOY — Use Vercel's managed secrets, not inline workflow vars. Vercel의 설정 → 환경 변수는 저장 시 암호화됩니다. GitHub Actions의 비밀은 없는 것보다 낫지만 배포 플랫폼 통합이 아닌 CI을 위해 설계되었습니다.
  4. POST — Verify CSP nonce on the deployed preview. 브라우저에서 Vercel 미리보기 링크를 열고 DevTools → 네트워크 → 루트 HTML 응답을 엽니다. CSP 헤더가 있어야 하며 요청당 고유 nonce와 함께 'strict-dynamic'을 포함해야 합니다.
  5. POST — Rotate any key that ever shipped, even to Preview. 키가 프로덕션 번들에 10분이라도 도달하면 키가 손상됩니다. 즉시 회전하십시오.

Cursor 관련 문제(4개 항목)

보안 위험을 야기하는 Cursor의 작업 흐름에 고유한 패턴:

  1. Agent mode auto-fixes propagate old patterns. 에이전트에 "인증 오류 수정"을 요청하면 에이전트는 동일한 인증 파일을 여러 번 다시 생성할 수 있으며, 코드베이스 컨텍스트에 있는 경우 매번 동일한 서비스 키를 인라인할 수 있습니다. 원본을 먼저 청소한 후 상담원에게 수정을 요청하세요.
  2. Cursor Index leaks intent. Cursor의 @codebase 인덱싱은 강력하지만 .cursor 디렉터리가 노출된 경우(잘못 구성된 S3, Git 기록) 인덱스는 아키텍처와 비밀 패턴을 드러냅니다. .cursor 로컬을 유지하세요.
  3. Composer mode loses context between files. Composer가 생성하는 각 파일은 최신입니다. 클라이언트 파일을 생성한 다음 API 경로를 생성하도록 요청하면 다른 Supabase 클라이언트 구성을 사용할 수 있습니다. 두 가지를 모두 검토하고 아키텍처와 일치하는지 확인하세요.
  4. Autocomplete bias toward "working" over "secure". Cursor은 현재 컨텍스트를 전달하는 가장 빠른 코드를 제안합니다. 테스트에 NEXT_PUBLIC_SERVICE_KEY이 있으면 자동 완성 기능이 이를 기억하고 다시 제안합니다. 모델과 코드를 공유하기 전에 테스트 픽스처를 청소하십시오.

다음 단계

Cursor 관련 패턴을 잠근 후 general vibe coding security checklist(44개 항목)과 step-by-step hardening을 교차 확인하세요. 도구를 혼합하는 경우 Claude Code checklist도 참조하세요.

// scan your app

그만 읽고, 당신 앱의 취약점을 직접 찾아보세요.

URL 추가 — FixVibe은 이 가이드의 모든 수동 검사와 200개 이상의 다른 검사를 1분 이내에 실행합니다. Free, 설치 없음, 카드 없음.

  • Free 계층 — 월 3회 스캔, 카드 없음.
  • URL에 대한 수동 검색 — 도메인 확인이 필요하지 않습니다.
  • Cursor, Claude Code, Lovable, Bolt, v0, Replit에 맞춰 조정되었습니다.
  • Coding-agent prompts for code/config findings, plus operator steps for DNS/provider fixes.
무료 스캔 실행

가입 불필요

Cursor 보안 체크리스트: 출시 전 28가지 항목 — Docs · FixVibe