Indonesia adalah salah satu pasar terbesar untuk Laravel di dunia, dan framework ini menyediakan file config/cors.php siap pakai sejak versi 7. Kesalahan klasik yang sering terjadi: mengatur 'allowed_origins' => ['*'] saat development lalu lupa mempersempitnya sebelum rilis ke production. Ini tetap berjalan mulus untuk request GET biasa, sampai tim mengaktifkan 'supports_credentials' => true untuk autentikasi Sanctum antar subdomain — saat itulah browser mulai menolak responsnya karena wildcard origin tidak boleh dipakai bersama credentials.
Kebijakan asal sama
Secara default, browser menegakkan Same-Origin Policy: kode JavaScript dari halaman satu asal (domain + skema + port) tidak bisa membaca response dari request yang dibuat ke asal yang berbeda. Ini adalah mekanisme keamanan fundamental yang mencegah skrip berbahaya di satu situs mencuri data dari situs lain tempat pengguna sedang login.
Bagaimana CORS melonggarkan kebijakan ini
CORS (Cross-Origin Resource Sharing) adalah sekumpulan header HTTP yang digunakan server untuk secara eksplisit mengizinkan asal eksternal tertentu (atau semua) membaca response-nya. Header kuncinya adalah Access-Control-Allow-Origin, yang menentukan domain mana yang diizinkan.
Jebakan wildcard plus credentials
Saat request dikirim dengan credentials: 'include' — dibutuhkan untuk mengirim cookie sesi ke API di subdomain lain — browser benar-benar menolak menerima Access-Control-Allow-Origin: * pada response. Spesifikasinya secara eksplisit melarang kombinasi origin wildcard dengan credentials; server harus mengembalikan origin persis yang mengirim request.
Untuk apa ini dibutuhkan
- Mendiagnosis error CORS dan mencari tahu persis header apa yang hilang di server.
- Menemukan
config/cors.phpLaravel yang masih terlalu longgar sebelum masuk production. - Memahami perbedaan antara request "sederhana" dan request preflight (OPTIONS).
CORS tidak melindungi server dari serangan
Anggapan keliru yang umum adalah CORS merupakan langkah keamanan sisi server — sebenarnya ia hanya membatasi apa yang bisa dibaca JavaScript di browser. Penyerang yang menggunakan curl, Postman, atau skrip backend secara langsung sepenuhnya melewati CORS, karena alat-alat tersebut tidak menerapkan Same-Origin Policy. CORS tidak boleh pernah dianggap pengganti autentikasi dan otorisasi yang sebenarnya di server.