FixVibe

// docs / security guides / pre-ship checklist

Checklist keamanan vibe coding: 44 item sebelum rilis

Daftar periksa praktis dan bertahap untuk aplikasi yang dibuat dengan Cursor, Claude Code, Lovable, Bolt, v0, Replit, dan Windsurf. Setiap item dapat ditindaklanjuti dalam waktu kurang dari lima menit. Jalankan sebelum Anda mendorong ke produksi, lalu jalankan lagi sebelum setiap rilis besar. Item dikelompokkan ke dalam tujuh kategori โ€” rahasia, database, autentikasi, header, pihak ketiga, penerapan, pemantauan โ€” dan ditandai dengan fase penerapan item tersebut.

PRE = pra-penerapan (audit sumber Anda). DEPLOY = pada waktu penerapan. POST = verifikasi pasca penerapan. Referensi item FixVibe periksa ID dalam formulir category.check-id jika relevan.

Rahasia dan kunci API (8 item)

Kunci berkode keras adalah satu-satunya temuan paling umum dalam aplikasi berkode getaran. Delapan item untuk mencegahnya:

  1. PRE โ€” Audit NEXT_PUBLIC_ env vars. Apa pun yang diawali NEXT_PUBLIC_ dikirimkan dalam paket klien. Jika salah satunya adalah kunci Supabase service_role (didekodekan menjadi JWT dengan "role":"service_role"), hapus kunci tersebut dan rutekan melalui klien khusus server (src/lib/supabase/service.ts dengan import 'server-only').
  2. PRE โ€” Grep for hardcoded provider keys. Cari sumber untuk sk_live_, pk_live_, STRIPE_SECRET, sk-ant-, sk-, AIza, AKIA, dan JWT- mencari string (eyJ). Pindahkan setiap klik ke .env.local dan referensi melalui process.env.* hanya di sisi server.
  3. PRE โ€” Verify .gitignore. Konfirmasi .env*.local, .npmrc, .yarnrc, dan file kredensial khusus penyedia apa pun akan diabaikan. Jalankan git ls-files yang disalurkan melalui pola penyedia Anda untuk menemukan apa pun yang sudah dikomit.
  4. PRE โ€” Scan the built bundle. Jalankan npm run build, lalu grep .next/static dan keluaran dist/ apa pun untuk pola yang sama. Jika kunci mencapai bundel, pengembang tidak pernah melakukan pemisahan env yang bersih.
  5. DEPLOY โ€” Set secrets per environment. Vercel: Pengaturan โ†’ Variabel Lingkungan, masing-masing mencakup Produksi / Pratinjau / Pengembangan. Jangan pernah berbagi sk_live_* dengan lingkungan Pratinjau. Gunakan penyimpanan env-var terenkripsi Vercel, bukan rahasia alur kerja sebaris.
  6. DEPLOY โ€” Disable build-log secret echo. Beberapa konfigurasi CI echo env vars selama pembuatan. Audit alur kerja vercel.json, GitHub Tindakan, atau setelan Halaman Cloudflare Anda untuk setiap echo $SECRET yang akan memasukkan nilai ke dalam log build publik.
  7. Tingkat POST โ€” Run a passive scan. FixVibe Free mencakup ini: tempel URL yang diterapkan, tunggu ~20 detik, cari temuan secrets.*. Cek secrets.browser-storage menangkap kunci yang masuk ke localStorage atau sessionStorage melalui penyalahgunaan SDK.
  8. POST โ€” Rotate any key that ever shipped. Jika kunci berada dalam paket publik selama beberapa menit, perlakukan kunci tersebut sebagai telah disusupi. Memutar kunci peran layanan Supabase melalui dasbor, membuat ulang kunci terbatas Stripe, mencabut kunci Anthropic / OpenAI / Google melalui konsolnya.

Kontrol akses basis data: RLS dan aturan Firestore (6 item)

BaaS defaultnya sengaja dibuat permisif agar tutorial pertama berhasil. Production memerlukan kebijakan yang eksplisit.

  1. PRE โ€” Force RLS on every public.* table. Di Supabase: setiap tabel harus memiliki ALTER TABLE ... ENABLE ROW LEVEL SECURITY dan FORCE ROW LEVEL SECURITY. Force penting: tanpanya, Postgres melewati RLS untuk pemilik tabel.
  2. PRE โ€” Write a policy per (table, role, action). Minimum: kebijakan SELECT yang bergabung pada auth.uid(). Lebih baik: pisahkan kebijakan INSERT / UPDATE / DELETE sehingga UPDATE tidak dapat menyelundupkan user_id perubahan yang mengalihkan kepemilikan.
  3. PRE โ€” Replace default Firebase rules. Aturan mode pengujian default dibaca allow read, write: if true;. Ganti dengan aturan terikat autentikasi per koleksi: match /users/{userId} dengan allow read, write: if request.auth.uid == userId;
  4. PRE โ€” Lint migrations in CI. Jalankan supabase db lint atau yang setara sebelum menggabungkan. CI akan gagal dalam pembangunan jika ada CREATE TABLE public.* yang tidak memiliki kebijakan RLS yang cocok.
  5. DEPLOY โ€” Confirm RLS survived deploy. Periksa ulang di Supabase Studio setelah penerapan: Tabel โ†’ setiap baris โ†’ RLS tombolnya adalah ON. Pro migrasi database terkadang mendahului file kebijakan; memverifikasi bahwa kebijakan tersebut aktif.
  6. POST โ€” Run an active scan against a verified domain. Cek aktif baas.supabase-rls menulis ke baris benih kecil menggunakan kunci anon dan melaporkan kembali jika penulisan berhasil โ€” i.e. RLS sebenarnya tidak menegakkan.

Otentikasi dan sesi (7 item)

Bug autentikasi dalam aplikasi berkode AI- cenderung tidak kentara: verifikasi token satu per satu, tanda HttpOnly yang terlewat, tanda getSession() yang seharusnya ada getUser().

  1. PRE โ€” Replace getSession() with getUser(). getSession() membaca cookie dan mempercayainya; getUser() memverifikasi dengan backend Supabase. Pada rute server selalu gunakan getUser().
  2. PRE โ€” Confirm token expiry. Tautan ajaib, penyetelan ulang kata sandi, dan token verifikasi email memerlukan masa berlaku yang diberlakukan oleh server. Tautan ajaib Supabase default akan kedaluwarsa setelah 1 jam โ€” jangan timpa ke angka yang lebih tinggi tanpa alasan yang jelas.
  3. PRE โ€” Verify JWT aud and exp. Jika Anda mendekode token secara manual di mana saja, periksa kedua klaim. Lebih baik: gunakan SDK getUser() yang dapat melakukannya untuk Anda.
  4. PRE โ€” Audit cookie flags. Cookie sesi khusus harus Secure; HttpOnly; SameSite=Lax (atau Strict untuk alur non-OAuth). Tidak ada materi sesi di localStorage.
  5. PRE โ€” Validate the next redirect param. Parameter kueri next setelah masuk harus dimulai dengan / dan bukan // (pengalihan terbuka ke attacker.example). Tolak apa pun di sisi server.
  6. POST โ€” Test logout. Masuk, keluar, periksa cookie (DevTools โ†’ Aplikasi โ†’ Cookie). Cookie sesi harus dihapus pada respons yang sama. Jika masalah ini terus berlanjut, penangan logout tidak benar-benar merusak status sisi server.
  7. POST โ€” Active probe. Pemeriksaan active.auth-flow dan active.account-enumeration memunculkan batasan autentikasi yang rusak โ€” respons berbeda pada "pengguna ada" vs "kata sandi salah", batas kecepatan login tidak ada, token reset yang tidak ditandatangani.

HTTP header keamanan dan Kebijakan Keamanan Konten (6 item)

Header adalah pengerasan termurah di seluruh pipeline dan paling konsisten dilewati oleh codegen.

  1. PRE โ€” Ship a real CSP. Minimal: script-src 'nonce-{NONCE}' 'strict-dynamic'; object-src 'none'; base-uri 'self'; frame-ancestors 'none'. Tidak ada 'unsafe-inline' di script-src. Next.js menerapkan nonce secara otomatis ketika middleware menyetel header permintaan x-nonce.
  2. PRE โ€” Add the legacy three. X-Content-Type-Options: nosniff, X-Frame-Options: DENY (atau mengandalkan CSP frame-ancestors saja), Strict-Transport-Security: max-age=31536000; includeSubDomains.
  3. PRE โ€” Tighten Referrer-Policy. Default strict-origin-when-cross-origin baik untuk sebagian besar aplikasi. Jangan kirim unsafe-url atau tanpa header sama sekali.
  4. PRE โ€” Replace Access-Control-Allow-Origin: *. Terima kasih. Ganti dengan daftar asal yang diizinkan secara eksplisit. Di mana pun * dan credentials: include, browser akan menolak permintaan tersebut โ€” namun hal tersebut bukan merupakan pertahanan terhadap backend yang salah dikonfigurasi.
  5. DEPLOY โ€” Verify headers post-deploy. Buka DevTools โ†’ Jaringan โ†’ klik dokumen root Anda โ†’ tab Header. CSP, HSTS, X-Frame-Options, X-Content-Type-Options harus ada. CSP tidak boleh memiliki 'unsafe-inline' di script-src.
  6. POST โ€” Run headers.security-headers. Pemeriksaan header pasif melaporkan setiap header yang hilang dengan panduan perbaikan platform penerapan (Vercel vercel.json, Cloudflare Halaman _headers, Netlify _headers, Next.js middleware).

Integrasi pihak ketiga dan API (5 item)

Setiap skrip yang Anda sertakan adalah pengecualian CSP dan potensi permukaan rantai pasokan. Perlakukan pihak ketiga sebagai bagian dari batasan kepercayaan Anda.

  1. PRE โ€” Reverse-proxy analytics where possible. PostHog, Masuk akal, Umami semuanya mendukung proksi melalui domain Anda sendiri (e.g. /api/posthog). Hal ini menjaga connect-src tetap pada asal yang sama dan bertahan dari pemblokir iklan.
  2. PRE โ€” CSP-allowlist the rest. Untuk Google Analytics, Stripe.js, Sentry, Intercom, GTM, dll., tambahkan masing-masing asal vendor ke direktif CSP yang cocok (script-src untuk loader, connect-src untuk telemetri, frame-src untuk iframe, img-src untuk piksel).
  3. PRE โ€” Use Stripe Checkout, not raw card forms. Stripe Checkout adalah pengalihan tingkat atas; tidak diperlukan entri CSP untuk skrip. Permukaan PCI yang dihosting sepenuhnya ada di domain Stripe. Gulung sendiri hanya jika Anda memiliki alasan yang kuat.
  4. PRE โ€” Lock package-lock.json in CI. Jalankan npm ci (bukan npm install) dalam build produksi. Audit dependensi dengan npm audit atau Snyk sebelum setiap rilis.
  5. POST โ€” Watch discovery.tech-fingerprint. Penemuan tumpukan teknologi pasif menampilkan versi perpustakaan yang dapat dilihat oleh perayap. Jika Anda mengirimkan EOL React, jQuery, atau Bootstrap, FixVibe menandainya dan menautkannya ke CVE yang dikenal.

Kebersihan dan infrastruktur penempatan (8 item)

Cara Anda menerapkannya sama pentingnya dengan apa yang Anda terapkan. AI- Aplikasi berkode khususnya mendapat manfaat dari pengerasan penerapan eksplisit.

  1. PRE โ€” Disable x-powered-by. Di next.config.js: poweredByHeader: false. Menghapus sinyal pengungkapan versi gratis.
  2. PRE โ€” Confirm middleware lives at src/middleware.ts. Dengan tata letak direktori src/, Next.js mengabaikan level root middleware.ts. Middleware yang salah tempat secara diam-diam gagal menyetel CSP / header autentikasi / batas kecepatan.
  3. PRE โ€” Sanity-check Vercel deployment protection. Produksi harus bersifat publik; Pratinjau harus dilindungi kata sandi atau dibatasi untuk anggota organisasi. discovery.platform-vercel melaporkan permukaannya.
  4. PRE โ€” Block dotfile and config probes at the edge. Tambahkan aturan penulisan ulang atau penolakan untuk pola /.env, /.git/*, /.aws/*, /.next/trace. Vercel mengembalikan 403 untuk banyak diantaranya secara default; pemeriksaan kembali.
  5. DEPLOY โ€” Separate environments. Produksi, Pratinjau, Pengembangan. Masing-masing mempunyai rahasia tersendiri. Kunci langsung tidak pernah mencapai Pratinjau, mode pengujian Stripe tidak pernah mencapai Produksi.
  6. DEPLOY โ€” Enable Vercel Web Application Firewall. Pro dan paket Perusahaan mencakup WAF dengan aturan terkelola. Cloudflare Halaman memiliki Mode Pertarungan Bot. Keduanya mengurangi penyalahgunaan pemindai otomatis dan beban semprotan kata sandi.
  7. POST โ€” Verify TLS configuration. SSL Labs atau testssl.sh terhadap domain produksi Anda. TLS minimum 1,2, pilih TLS 1.3, tidak ada sandi yang lemah, HSTS pramuat memenuhi syarat.
  8. POST โ€” Confirm health-check endpoints are minimal. A /api/health harus kembali 200 OK tanpa tubuh. Jangan menggemakan lingkungan, membuat hash, atau menerapkan stempel waktu tanpa autentikasi.

Pemantauan berkelanjutan dan pemindaian ulang (4 item)

Keamanan bukanlah audit pra-kapal yang dilakukan satu kali saja. Drift terjadi pada setiap penerapan.

  1. Verify your production domain in FixVibe. Dashboard โ†’ Domains โ†’ DNS TXT atau HTTP verifikasi file. Ini membuka pemindaian ulang terjadwal, pemeriksaan aktif, dan pemantauan ancaman langsung.
  2. Schedule passive re-scans. Pro paket mendukung irama 3 jam; Unlimited mendukung irama 6 jam. Setiap pemindaian terjadwal yang memunculkan temuan baru akan memicu email (dan webhook jika Anda sudah mengirimkannya).
  3. Wire outbound webhooks. Account โ†’ Webhooks โ†’ tambahkan titik akhir HTTPS, berlangganan scan.completed + finding.created + scan.active_api.first_used. Rutekan ke Slack / Discord / PagerDuty.
  4. Enable live threat monitoring on Unlimited. Perbedaan log transparansi sertifikat, perubahan DNS, kebocoran rahasia bundel JS, daftar intelijen ancaman โ€” diaktifkan saat terdeteksi, bukan pada pemindaian terjadwal berikutnya.

Langkah selanjutnya

Ingin latar belakang pendidikan tentang mengapa barang-barang ini penting? Baca AI-generated code security scanning. Ingin cuplikan kode konkret untuk setiap langkah pengerasan? Lihat How to secure an app built with AI coding tools.

// scan your app

Cukup membaca. Saatnya temukan celah di aplikasimu.

Kunjungi URL โ€” FixVibe menjalankan setiap pemeriksaan pasif dari panduan ini ditambah 200+ pemeriksaan lainnya dalam waktu kurang dari satu menit. Free, tanpa instalasi, tanpa kartu.

  • Free tingkat โ€” 3 pemindaian / bulan, tanpa kartu.
  • Pemindaian pasif terhadap URL apa pun โ€” tidak memerlukan verifikasi domain.
  • Disetel untuk Cursor, Claude Code, Lovable, Bolt, v0, Replit.
  • Coding-agent prompts for code/config findings, plus operator steps for DNS/provider fixes.
Checklist keamanan vibe coding: 44 item sebelum rilis โ€” Docs ยท FixVibe