Cross-Origin Resource Sharing (CORS) adalah fitur keamanan yang diimplementasikan oleh browser web untuk mencegah permintaan yang berpotensi membahayakan dari satu situs web ke situs web lainnya. Fitur ini menjadi sangat penting ketika aplikasi web meminta sumber daya dari domain yang berbeda dari domainnya sendiri. Oleh karena itu, mengonfigurasi CORS dengan benar di server Anda sangat penting untuk memastikan bahwa permintaan tersebut aman sekaligus memungkinkan interaksi lintas asal yang diperlukan. Berikut ini beberapa praktik terbaik yang perlu diikuti saat mengonfigurasi CORS di server Anda.
Memahami CORS
Cross-Origin Resource Sharing (CORS) adalah mekanisme yang menyediakan cara bagi browser web untuk membuat permintaan lintas asal dengan aman. Hal ini penting untuk Aplikasi Halaman Tunggal (SPA) yang harus mengakses sumber daya dari domain lain (misalnya, API atau konten di situs web yang berbeda). Sebuah permintaan dikatakan lintas asal jika protokol, domain, dan portalnya tidak sama dengan dokumen yang mengeluarkan permintaan tersebut.
Secara default, browser web memblokir permintaan lintas asal karena masalah keamanan. Untuk mengizinkan permintaan ini, server perlu mengirimkan header HTTP tertentu (seperti Access-Control-Allow-Origin) untuk memberi sinyal kepada browser bahwa permintaan tersebut diizinkan. Proses ini disebut sebagai pengaktifan CORS.
sumber: medium.com |
Mengkonfigurasi CORS dengan Cara yang Benar
1. Membatasi Asal yang Diizinkan
Salah satu aspek yang paling penting dari konfigurasi CORS adalah mengatur asal mana yang dapat mengakses sumber daya server Anda. Menggunakan kontrol akses-bolehkan-asal-usul: * dapat menimbulkan risiko keamanan karena terbuka untuk semua asal saat menangani data atau fungsionalitas sensitif
Jangan gunakan wildcard, gunakan domain eksplisit yang diizinkan di server Anda. Misalnya, Anda dapat mengonfigurasi server untuk mengizinkan hanya domain Anda sendiri, serta subdomain yang Anda miliki.
Access-Control-Allow-Origin: https://example.com
Atau, jika server Anda melayani beberapa klien tepercaya, Anda bisa memeriksa header Asal secara dinamis dan merespons dengan nilai yang sesuai.
2. Gunakan Metode HTTP Tertentu
Header CORS juga dapat membatasi Metode HTTP (GET, POST, PUT, DELETE, dll.) yang dapat dilibatkan dalam permintaan lintas-asal. Disarankan untuk hanya menentukan metode yang dibutuhkan aplikasi Anda untuk beroperasi dengan benar.
Anda mungkin hanya perlu mengizinkan metode permintaan tertentu untuk API Anda; misalnya, jika API Anda hanya untuk pengambilan data, maka Anda mungkin hanya ingin mengizinkan permintaan GET:
Access-Control-Allow-Methods: GET, POST
Cara ini juga membuat daftar metode yang dapat diterima menjadi lebih sedikit, sehingga lebih sulit untuk mengeksploitasi potensi masalah keamanan.
3. Mengelola Akses ke Header Tertentu
Kita juga dapat menggunakan bagian lain dari konfigurasi CORS untuk mengekspos header mana saja yang ingin kita kirimkan kembali ke klien. Anda mungkin ingin mengekspos hanya beberapa header respons ke klien yang meminta, khususnya dalam kasus permintaan preflight (suatu bentuk permintaan CORS, di mana browser memeriksa apa yang diizinkan sebelum permintaan yang sebenarnya).
Access-Control-Allow-Headers: Content-Type, Authorization
Hal ini memastikan bahwa hanya header yang terdaftar yang terekspos ke klien, mencegah header yang tidak sah atau tidak perlu digunakan.
4. Menangani Permintaan Preflight dengan Benar
Sebelum membuat permintaan lintas asal yang sebenarnya, browser mengirimkan permintaan pra-penerbangan, yang merupakan permintaan HTTP OPSI. Permintaan ini memverifikasi bahwa izin server merupakan respons terhadap kebijakan CORS mengenai tindakan yang diinginkan. Server harus menjawab permintaan preflight dengan benar dan menetapkan header yang sesuai Access-Control-Allow-Methods dan Access-Control-Allow-Headers.
Misalnya, jika klien akan mengirim header khusus, server harus merespons seperti:
Access-Control-Allow-Headers: Content-Type, X-Custom-Header
Hal ini memastikan browser mengetahui header mana yang diizinkan untuk permintaan yang sebenarnya.
5. Gunakan Kredensial dengan Hati-hati
Kredensial (cookie atau autentikasi HTTP) dikecualikan dari permintaan CORS secara default. Jika aplikasi Anda memerlukan kredensial untuk dikirim oleh klien, Anda perlu mengatur header Access-Control-Allow-Credentials ke true. Hal ini memungkinkan peramban menyertakan kredensial dalam permintaan lintas asal.
Namun, hal ini perlu diwaspadai, karena pengiriman kredensial berpotensi mengekspos informasi sensitif ke situs web berbahaya jika salah konfigurasi. Pastikan header Access-Control-Allow-Origin tidak disetel ke karakter pengganti (*) saat mengaktifkan kredensial. Sebagai gantinya, gunakan asal tertentu yang tepercaya.
Access-Control-Allow-Credentials: true
6. Memantau dan Meninjau Kebijakan CORS
Memahami implikasi saat mengonfigurasi CORS adalah hal yang penting. Seiring berjalannya waktu, persyaratan aplikasi dan kebutuhan keamanan Anda akan berubah. Tinjau dan audit pengaturan CORS Anda secara teratur untuk memastikan pengaturan tersebut tidak bertentangan dengan kebijakan keamanan Anda saat ini.
Waspadai kemungkinan adanya celah keamanan, seperti gateway yang tidak sengaja terbuka atau asal akses yang terlalu luas. Menjaga kebijakan CORS Anda tetap ketat dan selalu diperbarui akan membantu melindungi aplikasi dan pengguna dari risiko keamanan.
Kesimpulan
Mengonfigurasi CORS di server Anda membutuhkan keseimbangan antara fungsionalitas dan keamanan. Meskipun mengizinkan permintaan lintas-asal sering kali diperlukan untuk aplikasi web modern, konfigurasi yang tidak tepat dapat membuat server Anda rentan terhadap kerentanan. Dengan mengikuti praktik terbaik seperti membatasi asal, mengontrol metode dan header yang diizinkan, dan menangani kredensial dengan hati-hati, Anda dapat memastikan bahwa server Anda tetap aman sambil memungkinkan interaksi lintas asal yang diperlukan. Peninjauan dan audit rutin terhadap kebijakan CORS Anda akan semakin melindungi aplikasi web Anda dari potensi serangan.
Kembali ke>>>> Memahami CORS: Pembagian Sumber Daya Lintas Asal