Pangerten dhasar Cross-Origin Resource Sharing (CORS)
Cross-Origin Resource Sharing (CORS) yaiku mekanisme keamanan sing ditrapake dening browser web kanggo mbatesi kepiye kode JavaScript sing mlaku ing siji asal (origin) bisa maca sumber daya saka asal liyane. Asal kasebut ditemtokake dening kombinasi skema (scheme), host, lan port. Nalika aplikasi web nyoba nggawe panjalukan lintas asal, browser bakal mriksa header respon HTTP sing dikirim dening server kanggo nemtokake manawa panjalukan kasebut diidini utawa diblokir.
Piranti Pemeriksa CORS iki mbantu para pangembang, kayata front-end developers, back-end developers, API platform developers, lan operations developers, kanggo mangerteni apa browser bakal ngidini panjalukan lintas asal adhedhasar kabijakan CORS sing ditemtokake. Kanthi nempelake header respon lan nemtokake rincian panjalukan, piranti iki bakal nuduhake keputusan browser kanthi menehi katrangan sing rinci.
Bedane Tanggepan Nyata lan Respon Preflight
Ing protokol CORS, ana rong jinis respon sing kudu dipahami kanthi bener nalika nindakake analisis:
- Tanggepan nyata: Iki digunakake kanggo mriksa apa kode browser bisa maca siji respon sing dikirim dening server sawise panjalukan utama kasembadan.
- Respon sadurunge pesawat: Iki digunakake kanggo balesan
OPTIONSsing dikirim dening browser sadurunge panjalukan utama. Tujuane yaiku kanggo nyetujoni cara (method) mengko lan jeneng header sing dijaluk dening klien.
Nalika mriksa respon preflight, baris status HTTP kudu ditempelake amarga status kasebut penting banget kanggo nemtokake validitas preflight. Yen ora ana baris status HTTP sing ditempelake, piranti bakal nuduhake katrangan "Ora ana baris status HTTP sing ditempelake, mula status preflight 2xx sing dibutuhake ora bisa dicenthang." lan asil preflight dadi "indeterminate". Status preflight sing sukses kudu nuduhake status 2xx. Yen status kasebut dudu 2xx, piranti bakal ngetokake katrangan "Status preflight ‹status› dudu status 2xx sing sukses.".
Aturan Header Access-Control-Allow-Origin
Header Access-Control-Allow-Origin nduweni peran utama kanggo nemtokake asal endi wae sing diidini maca sumber daya. Piranti iki bakal mriksa nilai header kasebut lan menehi keputusan adhedhasar aturan ing ngisor iki:
- Kocog Persis: Yen nilai header cocog karo asal sing dijaluk, piranti bakal nuduhake katrangan "Access-Control-Allow-Origin persis cocog karo
‹origin›.". - Wildcard (
*): Yen header ngemot*, iki tegese kabeh asal diidini, lan piranti bakal nuduhake "Access-Control-Allow-Origin ngidini sembarang asal kanggo panjalukan iki.". Nanging, aturan iki ora ditrapake yen panjalukan kalebu kredensial. - Ilang utawa Ora Valid: Yen header iki ora ditemokake, piranti bakal nuduhake "Access-Control-Allow-Origin ilang.". Yen header ngemot nilai sing dipisahake nganggo koma utawa nduweni nilai ganda, header kasebut dianggep ora valid lan bakal ngetokake katrangan "Access-Control-Allow-Origin nduweni nilai ora bener:
‹value›.". Yen ana prabédan antarane nilai nyata lan samesthine, bakal metu katrangan "Access-Control-Allow-Origin iku‹actual›, dudu‹expected›.".
Pangaruh Kredensial ing Kabijakan CORS
Nalika panjalukan kalebu kredensial, kayata cookie utawa otentikasi HTTP, aturan CORS dadi luwih ketat kanggo njaga keamanan data pangguna. Ing kahanan iki, ana rong aturan penting sing kudu dipatuhi:
- Ora Entuk nganggo Wildcard:
Access-Control-Allow-Originora bisa dadi*nalika kredensial kalebu. Yen aturan iki dilesakake, piranti bakal mblokir panjalukan kanthi katrangan "Access-Control-Allow-Origin ora bisa dadi * nalika kredensial kalebu.". - Kudu Ana Access-Control-Allow-Credentials: Header
Access-Control-Allow-Credentialskudu disetel kanthi persistrue. Yen bener, piranti bakal nuduhake "Access-Control-Allow-Credentials pancen bener.". Yen ilang utawa ora disetel daditrue, panjalukan bakal diblokir kanthi katrangan "Panjaluk sing dipercaya mbutuhake Access-Control-Allow-Credentials: bener.".
Yen panjalukan ora kalebu kredensial, header Access-Control-Allow-Credentials ora bakal mengaruhi keputusan browser, lan piranti bakal nuduhake katrangan "Kredensial ora klebu, supaya Access-Control-Allow-Credentials ora mengaruhi kaputusan iki.".
Aturan Metode lan Header ing Preflight
Nalika nindakake panjalukan preflight, browser bakal mriksa apa metode lan header sing dijaluk wis disetujoni dening server:
Metode sing Dijaluk
Browser bakal mriksa header Access-Control-Allow-Methods. Yen metode sing dijaluk diidini, piranti bakal nuduhake "Preflight ngidini ‹method›.". Yen metode kasebut kalebu metode sing aman (CORS-safelisted), metode kasebut ora perlu didaftarake ing header, lan piranti bakal nuduhake "‹method› punika CORS-cara aman lan ora perlu katon ing Access-Control-Allow-Methods.". Nanging, yen metode kasebut diblokir, bakal metu katrangan "Access-Control-Allow-Methods ora ngidini ‹method›.".
Header sing Dijaluk
Kanggo header sing dijaluk liwat Access-Control-Request-Headers, server kudu mangsuli nganggo Access-Control-Allow-Headers. Yen kabeh header diidini, piranti bakal nuduhake "Preflight ngidini jeneng header sing dijaluk: ‹headers›.". Yen ora ana header sing mbutuhake persetujuan preflight, bakal metu katrangan "Ora ana jeneng header sing dijaluk mbutuhake persetujuan preflight.".
Nalika panjalukan ora nganggo kredensial, wildcard * bisa digunakake kanggo ngidini kabeh header, lan piranti bakal nuduhake "Access-Control-Allow-Headers: * nyakup jeneng kasebut kanggo panjaluk tanpa kapercayan: ‹headers›.". Nanging, aturan khusus ditrapake kanggo header Authorization. Header Authorization kudu kadhaptar kanthi tegas ing Access-Control-Allow-Headers amarga Access-Control-Allow-Headers: * ora bisa nutupi header kasebut. Yen ora kadhaptar kanthi tegas, piranti bakal nuduhake "Authorization kudu kadhaptar kanthi tegas; Access-Control-Allow-Headers: * ora nutupi.".
Aturan Validasi Input lan Watesan Piranti
Kanggo nggunakake piranti iki, pangguna kudu ngetik data kanthi bener miturut watesan lan format sing wis ditemtokake:
- Watesan Karakter: Header respon HTTP sing ditempelake ora kena ngluwihi 200,000 karakter. Yen ngluwihi, bakal metu pesen kesalahan "Tanggepan iki luar biasa gedhe. Tansah ing
‹max›karakter.". Yen input kosong, bakal metu pesen "Tempel header respon HTTP sadurunge mriksa.". - Validitas Baris: Saben baris kudu dadi header HTTP utawa baris status sing bener. Yen ora bener, bakal metu pesen "Line
‹line›dudu header HTTP utawa baris status sing bener." utawa "Baris‹line›ngemot jeneng header HTTP sing ora bener.". - Format Asal: Asal sing dijaluk kudu mung ngemot skema, host, lan port opsional (umpamane
https://app.example.com) tanpa path, query, utawa kredensial. Yen ora bener, bakal metu pesen "Ketik asal kanthi mung skema, host lan port opsional, kayata https://app.example.com.". - Metode lan Header: Metode HTTP kudu bener lan dudu metode sing dilarang dening browser. Yen dilarang, bakal metu pesen "Browser ora ngidini cara
‹method›ing panjalukan fetch.". Saben header sing dijaluk uga kudu valid, yen ora, bakal metu pesen ""‹header›" dudu jeneng header panjalukan HTTP sing bener.".
Yen ana kesalahan input, piranti bakal nuduhake pesen "Ndandani input sing disorot lan coba maneh.".
Keamanan Data lan Cara Kerja
Piranti iki mriksa kabijakan CORS kanthi lokal. Header lan rincian panjalukan sampeyan tetep ing browser sampeyan. Ora ana sing diunggah utawa disimpen dening BroBroGo.
Piranti iki mung mriksa siji respon sing ditempelake marang aturan browser CORS. Piranti iki ora ngubungi server, ora maca URL, ora nyetel cookie, ora mriksa DNS/TLS, lan ora ngowahi konfigurasi server. Asil sing sukses mung nuduhake validitas data sing dilebokake lan ora njamin yen panjalukan langsung bakal bisa amarga faktor njaba kayata pangalihan, cache, owah-owahan aturan server, utawa ekstensi browser.
Pitakonan sing Sering Ditakonake (FAQ)
Apa aku kudu nempel respon nyata utawa respon preflight?
Gunakake respon nyata kanggo mriksa apa kode browser bisa maca siji respon. Gunakake respon Preflight kanggo balesan OPTIONS sing nyetujoni cara mengko lan jeneng header sing dijaluk.
Napa wildcard bisa gagal karo kredensial?
Nalika cookie utawa otentikasi HTTP kalebu, asal sing diidini kudu cocog karo asal sing dijaluk. Wildcards kanggo cara diijini lan header uga ilang makna wildcard.
Apa asil liwat mbuktekaken panjalukan urip bakal bisa?
Ora. Asil iki mung kalebu tanggepan sing ditempelake lan rincian panjaluk sing dilebokake ing kene. Pangalihan, tanggapan cache, ngganti aturan server, ekstensi browser lan respon nyata sawise preflight isih bisa ngganti asil.