API key terekspos di JavaScript sisi klien
Apa pun yang dikirim ke browser — inline script, bundle JS, source map — bisa dibaca siapa saja. Secret key (OpenAI, Stripe secret, AWS, URL database) yang tertanam di kode frontend praktis sudah dipublikasikan.
Apa itu
Build tool menanamkan environment variable saat compile. Kalau kamu mereferensikan sebuah secret di kode klien, secret itu berakhir di bundle JavaScript yang diunduh setiap pengunjung.
Ada pembagian penting: publishable/anon key (Stripe pk_live, konfigurasi web Firebase) memang dirancang untuk publik, tapi secret key (sk_live, service-role key, API key provider) tidak — dan tidak boleh sampai ke browser.
Kenapa penting
Provider key yang bocor memungkinkan siapa pun menghabiskan kuota di akunmu — tagihan LLM, biaya SMS, pengeluaran cloud — atau mengakses data yang diizinkan key tersebut.
Penyerang menyisir bundle JavaScript secara massal untuk mencari pola key. Secret yang ter-commit biasanya disalahgunakan dalam hitungan menit setelah live.
Cara memperbaiki
Panggil API pihak ketiga dari route server atau backend, jangan pernah dari browser. Browser berbicara ke endpoint-mu; endpoint-mu yang memegang key.
// app/api/summarize/route.ts (server-only)
export async function POST(req: Request) {
const { text } = await req.json();
const r = await fetch("https://api.openai.com/v1/responses", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.OPENAI_API_KEY}` },
body: JSON.stringify({ model: "gpt-4o-mini", input: text }),
});
return Response.json(await r.json());
}Di Next.js hanya variabel dengan prefiks NEXT_PUBLIC_ yang diekspos ke browser. Jangan pernah menaruh secret di balik prefiks itu — pakai hanya untuk nilai yang aman menjadi publik.
Kalau sebuah secret sudah terkirim ke browser, cabut dan terbitkan ulang. Menghapusnya dari build berikutnya tidak membatalkan salinan yang sudah tersedot.
FAQ
Apakah Stripe publishable key (pk_live) bermasalah di frontend?
Tidak — publishable key memang dimaksudkan untuk publik. Yang berisiko adalah secret key (sk_live), yang harus tetap di sisi server.
Bisakah aku cukup meng-obfuscate key-nya?
Tidak. Obfuscation sepele untuk dibalik. Satu-satunya perbaikan adalah menjauhkan secret dari klien sepenuhnya.
Apakah aplikasimu terpengaruh?
AppSafe memeriksa ini dan puluhan masalah lain dalam satu pemindaian gratis.
Pindai aplikasiku gratisPanduan terkait
File .env yang terekspos: cara penyerang menemukan rahasiamu
Satu .env yang bisa dijangkau bisa menyerahkan seluruh stack-mu.
Source map di produksi membocorkan kode sumbermu
File .map yang ikut terkirim menyerahkan kode sumber aslimu.
Flag cookie Secure, HttpOnly, dan SameSite
Tiga flag yang mencegah cookie sesi dicuri.