~/VibeHandbook
PDF Gratis

Bab 18 · 03

Secret dan API key: jebakan kunci yang terekspos

adalah apa pun yang memberikan akses: kunci (Application Programming Interface), kata sandi basis data, penyedia pembayaran, kunci penandatanganan. Kesalahan vibe coding yang paling umum — dan paling mahal — adalah membocorkan salah satunya.

Dua jebakan yang terus-menerus menjerat orang:

  • Secret di kode klien. Apa pun yang ada di kamu (JavaScript yang berjalan di browser) bersifat publik. Pengguna bisa membuka dev tools dan membacanya. AI, ketika diminta memanggil API dari komponen React, dengan senang hati akan menempelkan kunci secret kamu tepat di situ — dan sekarang siapa pun yang mengunjungi situs kamu bisa menyalinnya dan membengkakkan tagihan kamu. Kunci secret harus ada di server, tidak pernah di kode yang dikirim ke browser.
  • Secret di repo. Kunci yang di-hardcode dalam sebuah file akan ter-commit ke . Bahkan jika kamu menghapusnya nanti, ia tetap hidup selamanya di riwayat git, dan bot memindai repo publik persis untuk hal ini dalam hitungan menit setelah sebuah push.

Rumah yang benar untuk sebuah secret adalah sebuah — sebuah nilai yang dipasok ke aplikasi saat runtime, dijaga sepenuhnya di luar kode:

// VULNERABLE: key is in the source, will be committed to git
const stripe = new Stripe("sk_live_51H8xQ2eZvK...");

// SAFE: key is read from the environment, never written in code
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);

Sebuah secret hanya punya satu rumah yang aman — di sisi server, dibaca dari environment. Browser adalah tempat publik: apa pun yang dikirim ke sana bisa dibaca oleh siapa pun yang membuka dev tools.

            ┌──────────────────────────────────────────┐
            │  .env  (gitignored, never committed)      │
            │  STRIPE_SECRET_KEY=sk_live_...            │
            └───────────────────┬──────────────────────┘
                                │ injected at runtime
                                ▼
   ┌──────────────────────┐          ┌──────────────────────┐
   │   SERVER             │          │   BROWSER (client)    │
   │   process.env.KEY ✓  │   ✗──────│   anyone can read     │
   │   calls Stripe here  │  NEVER   │   dev tools · "view   │
   │                      │  send    │   source" · network   │
   └──────────────────────┘  here    └──────────────────────┘
        safe: stays private              public: = leaked

Tambahkan .env (dan .env.local, dsb.) ke .gitignore kamu sebelum kamu menulis satu secret pun. Kalau sebuah kunci pernah sampai masuk ke kode atau riwayat kamu, perlakukan itu sebagai sudah terbakar: rotasi kunci tersebut (buat yang baru dan cabut yang lama) — menghapus barisnya saja tidak cukup, karena kunci lama masih valid dan masih ada di luar sana.

Mau versi offline?

Unduh seluruh buku sebagai PDF atau EPUB — gratis.