Kesalahan konfigurasi CORS: jebakan wildcard dan reflection
Cross-Origin Resource Sharing (CORS) mengatur situs lain mana yang boleh membaca respons dari API-mu. Policy wildcard atau reflected origin bisa membuat situs mana pun mengirim request terautentikasi dan membaca hasilnya.
Apa itu
Browser memblokir pembacaan lintas-origin secara default. Header CORS melonggarkannya secara selektif. Access-Control-Allow-Origin: * membuka respons ke setiap situs.
Bug yang lebih halus adalah origin reflection: server memantulkan Origin apa pun yang dibawa request ke header allow-origin, yang secara efektif mempercayai semua orang meski tampak spesifik.
Kenapa penting
Kalau API-mu menyajikan data pengguna dan mengizinkan credentials, policy CORS yang terlalu luas memungkinkan situs jahat membaca data korban yang sedang login langsung dari API-mu.
Reflection yang dikombinasikan dengan Access-Control-Allow-Credentials: true sangat berbahaya — ia mematahkan perlindungan same-origin yang biasanya menjaga data pengguna tetap privat.
Cara memperbaiki
Validasi Origin request terhadap daftar tetap domain tepercaya, baru pantulkan kembali.
const ALLOWED = new Set(["https://app.yourdomain.com"]);
const origin = req.headers.get("origin") ?? "";
const allow = ALLOWED.has(origin) ? origin : "";
// only set the header when allow is non-emptyBrowser melarang Access-Control-Allow-Origin: * bersama credentials, jadi aplikasi kadang memantulkan origin sebagai gantinya — dan itulah celahnya. Pakai allowlist yang ketat.
Kalau sebuah endpoint tidak butuh akses lintas-origin, jangan kirim header CORS sama sekali. Buka hanya route spesifik yang benar-benar memerlukannya.
FAQ
Apakah Access-Control-Allow-Origin: * selalu buruk?
Tidak untuk resource yang benar-benar publik dan tanpa credential (mis. font publik atau API data terbuka). Ini berbahaya untuk apa pun yang terkait sesi pengguna.
Apakah CORS melindungi server-ku?
Tidak — CORS ditegakkan oleh browser, bukan server. Ia mengatur apa yang bisa dibaca JavaScript situs lain, bukan apakah sebuah request sampai ke kamu.
Apakah aplikasimu terpengaruh?
AppSafe memeriksa ini dan puluhan masalah lain dalam satu pemindaian gratis.
Pindai aplikasiku gratis