// docs / security guides / ai-code scanner
Pemindaian keamanan kode buatan AI: DAST untuk aplikasi vibe-coded
Aplikasi yang dibuat dengan Cursor, Claude Code, Lovable, Bolt, v0, Replit, dan Windsurf dikirimkan lebih cepat dibandingkan perangkat lunak web generasi sebelumnya β dan aplikasi tersebut dikirimkan dengan serangkaian celah keamanan yang dapat diprediksi. Halaman ini menjelaskan mengapa aplikasi yang dihasilkan AI- memerlukan pemindaian yang berbeda dibandingkan alat pentest tradisional, kelas kerentanan mana yang terlalu banyak terwakili, perbedaan DAST dengan SAST ketika basis kode dibuat setengah mesin, dan apa yang harus dicari dalam pemindai yang dibuat untuk beban kerja ini.
Mengapa AI- kode yang dihasilkan memerlukan pemindaian keamanan yang berbeda
AI alat pengkodean dilatih pada repositori sumber terbuka dalam skala besar. Data pelatihan tersebut condong ke make it work daripada make it secure. Beberapa pola struktural mengikuti dari itu:
- Autocomplete bias. Impor pencocokan terdekat menang. Menempelkan cuplikan Supabase yang menggunakan kunci
service_roledi satu file akan menjadikan kunci tersebut sebagai saran pelengkapan otomatis di file berikutnya β bahkan di komponen React sisi klien yang tidak pernah menjadi bagiannya. - No long-term context. LLM tidak memiliki ingatan tentang bypass RLS terakhir Anda atau insiden postmortem tim Anda. Setiap file yang dihasilkan masih segar, sering kali tidak ada pola pertahanan yang dibawa manusia ke seluruh file.
- Speed as the rewarded metric. Pengguna memuji kecepatan; LLM pelatihan memperkuatnya. "Hasilkan Next.js auth" tercepat mengalahkan "hasilkan Next.js auth paling aman" pada sinyal umpan balik latensi.
- Training data gaps. Basis kode lama mendominasi data pelatihan dan mendahului default keamanan modern (ketat CSP,
SameSite=Lax, HSTS, RLS). Kode yang dihasilkan mencerminkan pola yang normal pada tahun 2019 tetapi tidak aman saat ini. - Implicit platform trust. Ketika Cursor membuat aplikasi Vercel maka diasumsikan default Vercel aman. Beberapa di antaranya (auto-HTTPS, cookie bertanda tangan). Banyak yang tidak (tidak ada CSP secara default, permisif CORS, rute debug default Next.js).
Sepuluh kelas kerentanan terwakili secara berlebihan dalam aplikasi berkode getaran
Dari ribuan pemindaian aplikasi yang dihasilkan AI-, kelas temuan yang sama muncul secara tidak proporsional:
- Exposed Supabase service-role keys.
service_roleJWT (dimulaieyJ) yang berkomitmen pada paket klien mengabaikan setiap kebijakan RLS pada proyek. Cursor melengkapinya secara otomatis di sisi batas yang salah; kunci dikirimkan dalam/_next/static/.... - Missing Row-Level Security (RLS). Model melihat
CREATE TABLE public.itemsdan melanjutkan tanpa mengaktifkan RLS. Pengguna anonim kemudian dapat membaca atau menulis baris apa pun melalui kunci publik segera. Lihat baas.supabase-rls. - Open Firebase / Firestore rules. File aturan yang dihasilkan sering kali dibaca
allow read, write: if true;atau melewatkan file aturan seluruhnya. Aturan mode pengujian default akan kedaluwarsa setelah 30 hari dan mengunci database, tetapi hanya jika pengembang menyadarinya. - Hardcoded API keys in bundles. Stripe kunci langsung, kunci Antropik
sk-ant-*, OpenAIsk-*, GoogleAIza*, dan AWSAKIA*akhirnya dimasukkan ke dalam muatan JS ketika disiplin env-var hilang. secrets.browser-storage menandainya pada tingkat halaman yang dirender. - Missing Content Security Policy. Tidak ada
Content-Security-Policyheader respons berarti setiap skrip inline XSS hanya berjarak satu klik untuk pengambilalihan akun penuh. CSP bersifat abstrak; codegen secara rutin melewatkannya. headers.security-headers melaporkan kesenjangan dengan panduan perbaikan khusus platform penerapan. - Next.js middleware misplacement. Dengan tata letak
src/, Next.js hanya mengambilsrc/middleware.tsβ tingkat akarmiddleware.tsdiabaikan secara diam-diam. Auth tampaknya masih berfungsi karena halaman memanggilrequireAuth(), tetapi header, CSP, dan batas kecepatan tidak masuk. - IDOR via unsigned IDs. Penangan
GET /api/items/[id]yang dihasilkan memercayai parameter jalur dan tidak pernah memverifikasi kepemilikan. Berjalan di bilangan bulat atau ruang UUID akan mengekspos setiap data penyewa. - Broken auth flows. Token tautan ajaib tanpa
expires_at; JWT verifikasi yang melewatiauddanexp; panggilan sisi kliengetSession()(yang membaca cookie yang belum diverifikasi) alih-alih sisi servergetUser(). - Debug endpoints in production. Menghasilkan
/api/debug,/api/health,/api/__nextjs_original-stack-frame, atau/.next/tracerute kebocoran internal. discovery.platform-vercel memeriksanya dengan validasi konten untuk menghindari kesalahan positif pada SPA fallback. - Plaintext sensitive fields. Kata sandi, kunci API, dan PII disimpan sebagai teks biasa di Postgres karena migrasi tidak menjangkau
pgcryptoatau brankas eksternal.
DAST vs SAST: mengapa keduanya penting untuk kode yang dihasilkan AI-
Analisis statis (SAST) dan analisis dinamis (DAST) merupakan pelengkap, bukan pengganti. Pembagian ini lebih penting untuk kode yang dihasilkan AI- dibandingkan kode tulisan tangan.
SAST membaca kode sumber pada disk. Ia menangkap rahasia dalam file sumber, panggilan fungsi berbahaya, dan pola berisiko sebelum build dijalankan. Itu tidak dapat melihat konfigurasi runtime, variabel lingkungan yang diterapkan, atau bagaimana bundler mengubah kode Anda.
DAST mengenai aplikasi yang diterapkan seperti pengguna. Ia melihat respons yang dikirimkan, dijalankan pada bundel produksi, dan menangkap penyimpangan konfigurasi antara repo dan penerapan. Ia menemukan kunci hardcode dalam JavaScript yang ditranspilasi yang SAST tidak pernah dilihat karena dimasukkan melalui tugas process.env pada waktu pembuatan.
For AI-generated code, DAST is essential karena kapalnya berbeda dengan yang ditulis modelnya. Bundling, pengguncangan pohon, transpilasi, dan inlining variabel lingkungan semuanya menciptakan permukaan baru. SAST pada sumber dapat melewatkan seluruh rahasia yang tertanam dalam bundel. DAST menangkap kedua lapisan. Pipeline yang matang berjalan SAST di CI dan DAST terhadap pratinjau yang diterapkan β itulah pola FixVibe.
Apa yang harus dicari dalam pemindai kode AI-
Sebagian besar pemindai DAST untuk tujuan umum (Burp Suite, OWASP ZAP, Nessus) dirancang untuk aplikasi monolitik dan alur autentikasi tradisional. Memindai aplikasi yang dihasilkan Vercel + Supabase + Stripe AI- memerlukan:
- BaaS coverage. Pemeriksaan nyata terhadap Supabase RLS, Firebase / aturan Firestore, konfigurasi Clerk, AWS Amplify, dan bentuk JWT yang dihasilkan layanan tersebut. Aturan umum OWASP tidak tahu apa yang harus ditandai.
- Inspeksi bundel JS. Regex yang disetel untuk format kunci API-, token bertanda tangan, dan pola khusus penyedia (Stripe
sk_live_, Anthropicsk-ant-, Supabase JWT mulaieyJ). Heuristik entropi generik menghasilkan terlalu banyak kesalahan positif. - Passive + active split. Pemeriksaan pasif (header, cookie, rahasia, konfigurasi BaaS, DNS) dijalankan dengan aman terhadap URL apa pun. Probe aktif (SQLi, XSS, SSTI, IDOR berjalan) memerlukan batas otorisasi karena mereka menembakkan muatan bergaya serangan.
- Framework awareness. Mengenali Next.js App Router vs Pages Router, Vite SPA penulisan ulang, Vercel perlindungan penerapan, Cloudflare Perutean halaman. Pemindai yang tidak membedakan fallback Vite SPA dari
/_next/build-manifest.jsonyang asli menghasilkan kebisingan. - Rate-limit safety. Anggaran permintaan terbatas per pemindaian, perbandingan respons dasar untuk menghindari WAF- kesalahan positif yang membingungkan, garis dasar pemeriksaan jalur acak untuk mendeteksi penerapan menyeluruh-403.
- Authorization gating for intrusive payloads. Mengirim SQLi atau OS- muatan perintah ke domain yang bukan milik Anda adalah ilegal di sebagian besar yurisdiksi. Pemindai sebenarnya memerlukan DNS atau HTTP- verifikasi kepemilikan file sebelum membiarkan Anda menjalankan mode aktif terhadap target.
Pendekatan FixVibe: pemindaian berbasis bukti, muatan positif palsu yang rendah
FixVibe is a DAST built specifically for AI-generated web apps. The passive phase runs 200+ checks on the rendered page (headers, CSP, cookies, leaked secrets, BaaS misconfiguration, tech fingerprinting, DNS, attack-surface discovery). The active phase adds payload-firing probes (SQLi, XSS, SSTI, CORS, redirects, IDOR walking, CSRF, account enumeration, blind-SSRF) gated behind verified-domain ownership. Repo scans add code-phase checks against connected GitHub repositories. Every finding includes evidence, a CWE link, a remediation recipe, and either a coding-agent prompt or operator steps depending on who can actually apply the fix. The scan engine is open in the changelog β every new check, accuracy improvement, and false-positive fix is logged publicly.
FixVibe vs Burp Suite, ZAP, dan Nessus: ketika masing-masing alat menang
Tidak ada satu alat pun yang mencakup setiap alur kerja. Pembingkaian jujur ββyang cocok dengan FixVibe:
| Aspect | Suite Sendawa / OWASP ZAP | Nessus / Qualys | FixVibe |
|---|---|---|---|
| Setup | Proksi manual + konfigurasi browser | Pemasangan agen jaringan | Tempel URL, masuk |
| Saatnya untuk penemuan pertama | Menit ke jam | Berjam-jam hingga berhari-hari | Detik hingga menit |
| BaaS pemeriksaan konfigurasi | Tidak ada dukungan kelas satu | No | Supabase RLS, Firebase aturan, Panitera, JWT bentuk |
| JS deteksi rahasia bundel | Regex entropi generik | No | Propola khusus vider + pemindaian penyimpanan browser |
| AI- kesadaran kerangka berkode | Unaware | Unaware | Next.js, Vite, Vercel, Cloudflare Halaman, Supabase |
| Gerbang otorisasi pemindaian aktif | Disiplin lingkup manual | Disiplin lingkup manual | Diperlukan: DNS atau HTTP- verifikasi domain file |
| Kelas satu API + MCP | API ada | API ada | REST + MCP server untuk Claude / Cursor / Continue |
Dimana alat-alat tersebut saling melengkapi
- Start with FixVibe passive sebagai baseline 30 detik gratis terhadap pratinjau penerapan apa pun. Jika tidak ada yang muncul, Anda memiliki sinyal percaya diri yang cepat.
- Pindah ke FixVibe active pada domain terverifikasi bila Anda menginginkan cakupan aktif penuh (SQLi/SSTI/IDOR/etc.) terhadap infrastruktur Anda sendiri.
- Layer SAST (Semgrep, CodeQL, Snyk) pada kode sumber di CI. SAST menangkap apa yang tidak dapat dilihat oleh runtime β pola berisiko dalam jalur kode yang tidak pernah mencapai penerapan.
- Reach for Burp Suite ketika Anda memerlukan rantai serangan khusus (bypass autentikasi spesifik, skenario IDOR yang rumit, kelemahan logika bisnis). Bersendawa adalah meja kerja manual terdalam yang tersedia; FixVibe adalah baseline otomatis tercepat.
Langkah selanjutnya
Continue dengan Vibe coding security checklist untuk audit pra-pengiriman 44 item, atau lompat ke How to secure an app built with AI coding tools untuk pengerasan langkah demi langkah dengan cuplikan kode.
