Apa itu Berbagi Sumber Daya Lintas Asal?

Berbagi sumber daya lintas asal (CORS) adalah mekanisme untuk mengintegrasikan aplikasi. CORS menentukan cara aplikasi web klien yang dimuat dalam satu domain berinteraksi dengan sumber daya di domain yang berbeda. Hal ini berguna karena aplikasi yang kompleks sering kali merujuk API dan sumber daya pihak ketiga dalam kode sisi kliennya. Misalnya, aplikasi Anda dapat menggunakan peramban untuk menarik video dari API platform video, menggunakan font dari pustaka font publik, atau menampilkan data cuaca dari basis data cuaca nasional. CORS memungkinkan peramban klien untuk meminta konfirmasi kepada server pihak ketiga apakah permintaan tersebut sah sebelum melakukan transfer data apa pun.

Mengapa berbagi sumber daya lintas asal itu penting?

Dahulu, ketika awal mula perkembangan teknologi internet, muncul masalah pemalsuan permintaan lintas situs (CSRF). Masalah ini mengirimkan permintaan klien palsu dari peramban korban ke aplikasi lain.

Misalnya, korban masuk ke aplikasi bank mereka. Kemudian mereka diperdaya untuk memuat sebuah situs web eksternal di tab peramban baru. Situs web eksternal tersebut kemudian menggunakan kredensial cookie korban dan meneruskan data ke aplikasi bank dengan berpura-pura sebagai korban. Pengguna yang tidak sah ini kemudian memiliki akses yang tidak diinginkan ke aplikasi bank.

Untuk mencegah masalah CSRF tersebut, kini semua peramban menerapkan kebijakan asal yang sama.

Kebijakan asal yang sama

Saat ini, peramban menerapkan kebijakan bahwa klien hanya dapat mengirim permintaan ke sumber daya dengan asal yang sama dengan URL klien. Protokol, port, dan nama host URL klien harus cocok dengan server yang diminta.

Misalnya, perhatikan perbandingan asal untuk URL di bawah ini dengan URL klien http://store.aws.com/dir/page.html.

URL

Hasil

Alasan

http://store.aws.com/dir2/new.html

Asal yang sama

Hanya jalurnya yang berbeda

http://store.aws.com/dir/inner/other.html        

Asal yang sama

Hanya jalurnya yang berbeda

https://store.aws.com/page.html

Asal yang berbeda      

Protokol yang berbeda

http://store.aws.com:81/dir/page.html

Asal yang berbeda

Port yang berbeda (http:// adalah port 80 secara default)

http://news.aws.com/dir/page.html

Asal yang berbeda

Host yang berbeda

Jadi, kebijakan asal yang sama sangatlah aman, tetapi tidak fleksibel untuk kasus penggunaan asli.

Berbagi sumber daya lintas asal (CORS) adalah perluasan dari kebijakan asal yang sama. Anda membutuhkannya untuk berbagi sumber daya yang sah dengan pihak ketiga eksternal. Misalnya, Anda memerlukan CORS saat ingin menarik data dari API eksternal yang bersifat publik atau sah. Anda juga memerlukan CORS jika ingin memberi pihak ketiga yang sah akses ke sumber daya server milik Anda sendiri.

Bagaimana cara kerja berbagi sumber daya lintas asal?

Dalam komunikasi internet standar, peramban Anda mengirimkan permintaan HTTP ke server aplikasi, menerima data sebagai respons HTTP, dan menampilkannya. Dalam terminologi peramban, URL peramban saat ini disebut asal saat ini dan URL pihak ketiga adalah lintas asal.

Saat Anda membuat permintaan lintas asal, berikut adalah proses permintaan-respons:

  1. Peramban menambahkan header asal ke permintaan dengan informasi tentang protokol asal saat ini, host, dan port
  2. Server memeriksa header asal saat ini dan merespons dengan data yang diminta serta header Access-Control-Allow-Origin
  3. Peramban melihat header permintaan kontrol akses dan berbagi data yang telah dikembalikan dengan aplikasi klien

Atau, jika server tidak ingin mengizinkan akses lintas asal, server akan merespons dengan pesan kesalahan.

Contoh berbagi sumber daya lintas asal

Misalnya, perhatikan situs https://news.example.com. Situs ini ingin mengakses sumber daya dari suatu API di partner-api.com.

Para developer di https://partner-api.com akan terlebih dahulu mengonfigurasi header berbagi sumber daya lintas asal (CORS) di server mereka dengan menambahkan new.example.com ke daftar asal yang diizinkan. Mereka melakukannya dengan menambahkan baris yang ada di bawah ini ke file konfigurasi server mereka.

Access-Control-Allow-Origin: https://news.example.com

Setelah akses CORS dikonfigurasi, news.example.com dapat meminta sumber daya dari partner-api.com. Untuk setiap permintaan, partner-api.com akan merespons dengan Access-Control-Allow-Credentials : "true." Kemudian, peramban akan mengetahui bahwa komunikasi tersebut sah dan mengizinkan akses lintas asal.

Jika Anda ingin memberikan akses ke beberapa asal, gunakan daftar yang dipisahkan koma atau karakter wildcard seperti * yang memberikan akses kepada semua orang.

Apa itu permintaan preflight CORS?

Dalam HTTP, metode permintaan adalah operasi data yang klien ingin agar dilakukan oleh server. Metode HTTP umum mencakup GET, POST, PUT, dan DELETE.

Dalam interaksi berbagi sumber daya lintas asal (CORS) umum, peramban akan mengirimkan header permintaan dan kontrol akses pada saat yang bersamaan. Hal ini biasanya berupa permintaan data GET dan dianggap sebagai risiko rendah.

Namun, beberapa permintaan HTTP dianggap kompleks dan memerlukan konfirmasi server sebelum permintaan yang sebenarnya dikirim. Proses prapersetujuan tersebut disebut sebagai permintaan preflight.

Permintaan lintas asal yang kompleks

Permintaan lintas asal dianggap kompleks jika permintaan tersebut menggunakan salah satu dari hal berikut ini:

  • Metode selain dari GET, POST, atau HEAD
  • Header selain dari Accept-Language, Accept, atau Content-Language
  • Header Content-Type selain dari multipart/form-data, application/x-www-form-urlencoded, atau text/plain

Misalnya, permintaan untuk menghapus atau memodifikasi data yang ada dianggap sebagai permintaan yang kompleks.

Cara kerja permintaan preflight

Jika diperlukan, peramban akan membuat permintaan preflight. Ini adalah sebuah permintaan OPTIONS seperti berikut ini.

OPTIONS /data HTTP/1.1

Asal: https://example.com

Access-Control-Request-Method: DELETE

Peramban akan mengirimkan permintaan preflight sebelum mengirimkan pesan permintaan yang sebenarnya. Server harus menanggapi permintaan preflight dengan informasi mengenai permintaan lintas asal yang akan diterima server dari URL klien. Header respons server harus menyertakan hal-hal berikut:

  • Access-Control-Allow-Methods
  • Access-Control-Allow-Headers
  • Access-Control-Allow-Origin

Contoh respons server adalah sebagai berikut.

HTTP/1.1 200 OK

Access-Control-Allow-Headers: Content-Type

Access-Control-Allow-Origin: https://news.example.com

Access-Control-Allow-Methods: GET, DELETE, HEAD, OPTIONS

Terkadang, respons preflight akan menyertakan header Access-Control-Max-Age tambahan. Metrik ini menentukan durasi (dalam detik) bagi peramban untuk membuat cache hasil preflight di peramban. Pembuatan Cache akan memungkinkan peramban untuk mengirimkan beberapa permintaan kompleks di antara permintaan-permintaan preflight. Peramban tidak harus mengirimkan permintaan preflight lain hingga waktu yang ditentukan oleh max-age terlewati.

 

Apa perbedaan antara CORS dan JSONP?

JSON with Padding (JSONP) adalah teknik historis yang memungkinkan komunikasi di antara aplikasi-aplikasi web yang berjalan pada domain yang berbeda.

Dengan JSONP, Anda dapat menggunakan tanda skrip HTML di halaman klien. Tanda skrip dapat memuat file JavaScript eksternal atau menyematkan kode JavaScript langsung di dalam halaman HTML. Karena skrip tidak mengikuti kebijakan asal yang sama, Anda dapat mengambil data lintas asal melalui kode JavaScript.

Namun, data tersebut harus dalam format JSON. Selain itu, JSONP kurang aman dibandingkan berbagi sumber daya lintas asal (CORS) karena JSONP bergantung pada kredibilitas domain eksternal untuk menyediakan data yang aman.

Peramban modern telah menambahkan beberapa fitur keamanan sehingga kode lama yang berisi JSONP tidak akan lagi berfungsi pada peramban modern. CORS adalah standar web global saat ini untuk kontrol akses lintas asal.

Baca tentang JavaScript »

Baca tentang JSON »

Apa saja praktik terbaik CORS?

Anda perlu melakukan hal-hal berikut ini saat mengonfigurasi berbagi sumber daya lintas asal (CORS) di server Anda.

Tentukan daftar akses yang sesuai

Menggunakan daftar yang dipisahkan koma untuk memberikan akses ke domain-domain individu baik untuk dilakukan. Hindari menggunakan wildcard kecuali jika Anda ingin membuat API publik. Menggunakan wildcard dan ekspresi reguler dapat mengakibatkan kerentanan.

Misalnya, Anda menulis ekspresi reguler yang memberikan akses ke semua situs dengan akhiran permitted-website.com. Dengan satu ekspresi, Anda telah memberikan akses ke api.permitted-website.com dan news.permitted-website.com. Namun, Anda juga secara tidak sengaja memberikan akses ke situs yang tidak sah, yang mungkin menggunakan domain seperti maliciouspermitted-website.com.

Hindari menggunakan asal null dalam daftar Anda

Beberapa peramban akan mengirimkan nilai null dalam header permintaan untuk skenario-skenario tertentu seperti permintaan file atau permintaan dari host lokal.

Namun, Anda tidak boleh menyertakan nilai null dalam daftar akses Anda. Hal ini juga akan memunculkan risiko keamanan karena permintaan yang tidak sah yang berisi header null mungkin akan mendapatkan akses.

Bagaimana AWS dapat mendukung kebutuhan CORS Anda?

Banyak layanan kami yang memiliki dukungan berbagi sumber daya lintas asal (CORS) bawaan. Jadi, Anda dapat mengontrol akses lintas asal ke API dan sumber daya yang dilakukan hosting di Amazon Web Services (AWS).

Berikut adalah beberapa layanan AWS dengan dukungan CORS:

  • Amazon Simple Storage Service (Amazon S3) adalah layanan penyimpanan objek dengan kelas penyimpanan yang hemat biaya untuk semua kasus penggunaan penyimpanan data. Amazon S3 memungkinkan Anda untuk membuat dokumen konfigurasi CORS dengan aturan yang dapat mengidentifikasi asal yang akan Anda izinkan untuk mengakses data S3, operasi (metode HTTP) yang akan Anda dukung untuk setiap asal, dan informasi khusus operasi lainnya. Anda dapat menambahkan hingga 100 aturan ke dalam konfigurasi.
  • Amazon API Gateway adalah layanan terkelola penuh yang memudahkan Anda dalam membuat, menerbitkan, memelihara, memantau, dan mengamankan API pada semua skala. Anda dapat mengaktifkan CORS untuk API REST dengan satu klik secara langsung di konsol Amazon API Gateway.

Mulai menggunakan API di AWS dengan membuat akun sekarang juga.

Langkah Berikutnya di AWS

Lihat sumber daya terkait produk tambahan
Lihat Layanan Integrasi Aplikasi 
Daftar untuk akun gratis

Dapatkan akses secara instan ke AWS Tingkat Gratis.

Daftar 
Mulai membangun di konsol

Mulai membangun di Konsol Manajemen AWS.

Masuk