Mulailah dengan memisahkan dua hal yang berubah bersamaan: jalur jaringan dan penegakan oleh peramban. VPN mengubah alamat keluar; ia tidak mengubah origin halaman, yang tersusun dari skema, host, dan port. Jika permintaan kini berhasil, ada sesuatu pada respons yang berubah, atau permintaannya sendiri berubah. Menentukan yang mana adalah seluruh penyelidikan.

CORS adalah protokol header yang ditegakkan peramban, jadi tidak ada apa pun di jalur jaringan yang bisa mematikannya.

Origin bukan alamat IP

Origin adalah skema, host, dan port. Itu bukan alamat tempat paket keluar, dan bukan IP yang dilihat server. Itulah sebabnya VPN dapat mengubah setiap alamat yang teramati dan membiarkan origin tetap sama. Peramban membandingkan Access-Control-Allow-Origin dari respons dengan origin halaman, dan alamat keluar tidak pernah masuk ke perbandingan itu.

Jadi ekstensi atau proksi yang tampak memperbaiki galat CORS melakukan hal lain: menulis ulang header, atau merutekan permintaan sehingga tidak lagi lintas-origin. Keduanya bukan sifat VPN.

Apa yang sebenarnya dikirim peramban

Untuk permintaan lintas-origin yang bukan sederhana, peramban lebih dulu mengirim prapemeriksaan OPTIONS, membawa metode dan header yang dimaksud. Server harus menjawab dengan izin yang diperbolehkannya, dan permintaan sebenarnya menyusul hanya jika jawaban itu memenuhi aturan. VPN mengubah jalur yang membawa kedua pertukaran dan dapat mengubah apa yang dijawab layanan perantara. Ia tidak mengubah string origin atau syarat prapemeriksaan.

Klien baris perintah biasanya tidak menampilkan semua itu. Ia mungkin tidak mengirim header Origin, sering melewati prapemeriksaan, dan mungkin membawa kredensial berbeda. Badan yang dikembalikan ke curl membuktikan bahwa server menjawab curl.

Temukan respons yang berubah

Bandingkan respons sebenarnya melalui setiap jalur, bukan hanya kode status. Lihat header yang membawa izin CORS, tipe konten, pengalihan apa pun, dan apakah varian WAF atau CDN menghasilkan halaman berbeda. Penolakan regional, pengalihan autentikasi, atau halaman galat tanpa header izin semuanya gagal di peramban sambil tampak seperti bug CORS. Itu perbedaan jalur pengiriman, dan itulah yang perlu didokumentasikan.

Tangkap header respons dari kedua jalur dan bandingkan baris demi baris. Jika satu-satunya perbedaan adalah tidak adanya Access-Control-Allow-Origin pada satu halaman galat, Anda telah menemukan penyebabnya.

Perbaiki layanan, bukan penegakan

Ketika layanan itu milik Anda, nyatakan origin yang diizinkan dan fitur permintaan secara eksplisit, lalu baca galat yang dihasilkan frontend dan perantaranya. Jika tidak, kirimkan perbandingan yang sudah dibersihkan kepada pemilik layanan. Jangan pernah menyertakan kuki, header otorisasi, atau ekspor sesi dalam laporan itu, karena itulah kredensial yang hendak dilindungi kebijakan.

Hindari ekstensi peramban yang menonaktifkan CORS. Ekstensi itu mengubah batas keamanan sambil menyembunyikan perbedaan respons yang seharusnya dijelaskan, dan membiarkan kegagalan yang sama bagi setiap pengguna lain.

Catat kedua respons, origin yang dipakai, dan jalur yang ditempuh. Catatan itu mengubah desas-desus VPN menjadi bug layanan.

Artikel terkait