Fetch Metadata Membantu Server Menyaring Request Cross-Site
Server sering menerima data HTTP yang cukup untuk memproses request, tetapi konteks yang tersedia belum tentu menjelaskan aksi browser yang memicunya. Header request Fetch Metadata menambahkan konteks tersebut. Browser yang mendukung mekanisme ini mengirim field Sec-Fetch-* yang menggambarkan hubungan antara pemicu dan target, mode request, destination, serta status aktivasi pengguna pada navigasi tertentu.
Header tersebut dapat menopang kebijakan isolasi resource di sisi server. Endpoint yang hanya ditujukan bagi traffic aplikasi same-origin dapat menolak request ketika metadata menunjukkan konteks cross-site yang tidak sesuai sebelum logika aplikasi memprosesnya.
Sec-Fetch-Site menggambarkan hubungan pemicu
Sec-Fetch-Site lazim menjadi input pertama dalam kebijakan. Nilainya menggambarkan hubungan antara pemicu request dan resource yang diminta:
same-origin
same-site
cross-site
nonesame-origin merupakan hubungan paling sempit. same-site mencakup request dengan origin berbeda yang tetap memenuhi kriteria site yang sama. cross-site menandai request yang melintasi batas site. none digunakan untuk request yang tidak terkait dengan origin pemicu melalui pola biasa, termasuk navigasi tertentu yang dipicu pengguna.
Endpoint sensitif dapat memakai sinyal ini untuk menolak request cross-site ketika akses semacam itu bukan bagian dari kontraknya.
jika Sec-Fetch-Site == cross-site:
tolak kecuali endpoint secara eksplisit mengizinkannyaAturan tersebut adalah contoh kebijakan, bukan konfigurasi universal. Resource publik, alur federasi, webhook, dan endpoint yang memang menerima akses dari site lain dapat memerlukan perlakuan berbeda.
Mode dan destination memperjelas konteks request
Sec-Fetch-Mode mencerminkan mode request, dengan nilai seperti navigate, cors, no-cors, dan same-origin. Sec-Fetch-Dest menggambarkan destination request, misalnya document, image, script, atau empty.
Gabungan field tersebut memungkinkan server membedakan bentuk request yang dapat menuju ruang URL yang sama.
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: no-cors
Sec-Fetch-Dest: imageEndpoint yang mengembalikan JSON privat tidak memiliki alasan umum untuk menerima request cross-site bergaya image. Penolakan konteks yang bukan jalur aplikasi sah mengurangi paparan terhadap pola request cross-site yang digerakkan browser.
Metadata ini tidak menyatakan identitas bisnis pemanggil. Autentikasi dan otorisasi tetap menentukan principal yang boleh mengakses resource.
Navigasi memerlukan perlakuan yang disengaja
Navigasi top-level merupakan operasi cross-site yang normal di web. Aturan menyeluruh yang menolak setiap request cross-site dapat memblokir titik masuk yang sah.
Sec-Fetch-Mode: navigate menandai mode navigasi, sedangkan Sec-Fetch-User: ?1 dapat menunjukkan bahwa request navigasi dipicu oleh aktivasi pengguna. Kebijakan dapat mempertimbangkan sinyal tersebut saat aplikasi memang menerima navigasi dari site eksternal.
Sebagai contoh, route HTML publik dapat menerima navigasi sementara route API yang mengubah state menolak traffic cross-site. Keputusan per endpoint menjaga Fetch Metadata agar tidak berubah menjadi sakelar global yang terlalu luas.
Header ini adalah sinyal, bukan kredensial autentikasi
Header Fetch Metadata memakai prefiks Sec- dan termasuk forbidden request-header names bagi API konten web, sehingga script halaman biasa tidak dapat menetapkannya secara langsung melalui interface seperti fetch(). Properti browser tersebut membuat field ini berguna sebagai sinyal konteks request.
Mekanisme ini tetap tidak menggantikan kredensial, pertahanan CSRF, validasi origin saat diperlukan, atau otorisasi di server. Client non-browser berada di luar model enforcement browser dan dapat menyusun request HTTP secara mandiri.
Karena itu, server sebaiknya memperlakukan Fetch Metadata sebagai batas tambahan untuk traffic browser. Mekanisme ini mempersempit konteks request yang diterima, bukan menetapkan identitas pemanggil.
Metadata yang tidak ada memerlukan kebijakan eksplisit
Tidak setiap request yang mencapai aplikasi dijamin membawa header Fetch Metadata. Jalur kompatibilitas, client non-browser, intermediary, dan batasan deployment dapat menghasilkan request tanpa field yang diharapkan kebijakan.
Aplikasi perlu menetapkan arti kondisi tersebut untuk setiap endpoint. Rollout bertahap dapat mencatat konteks yang hilang atau ditolak sebelum enforcement, lalu memperketat route setelah pola traffic sah terpetakan.
metadata tersedia -> evaluasi kebijakan
metadata tidak ada -> keputusan kompatibilitas eksplisitMenganggap metadata yang tidak ada setara dengan same-origin secara diam-diam melemahkan batas karena kedua keadaan membawa bukti yang berbeda.
Kebijakan mengikuti kontrak endpoint
Kebijakan Fetch Metadata yang rapi dimulai dari konteks request yang diizinkan, bukan satu aturan penolakan global. Asset publik statis, navigasi HTML, API terautentikasi, endpoint upload, dan route integrasi cross-origin memiliki kontrak berbeda.
Middleware dapat memuat default bersama sambil mempertahankan pengecualian pada level route. Batas pentingnya adalah pengecualian tetap eksplisit dan sempit. Pengecualian untuk satu integrasi tidak semestinya membuka endpoint aplikasi lain terhadap konteks cross-site yang sama.
Pencatatan nilai yang ditolak selama deployment juga memberi operator bukti konkret tentang traffic yang terdampak. Field yang relevan mencakup route, method, Sec-Fetch-Site, Sec-Fetch-Mode, dan Sec-Fetch-Dest, dengan praktik sanitasi log tetap diterapkan pada data request sensitif.
Fetch Metadata menambahkan konteks sebelum kerja aplikasi
Nilai utama Fetch Metadata terletak pada posisinya. Browser memasok konteks request, lalu server dapat mengevaluasinya sebelum perilaku endpoint yang mahal atau sensitif berjalan.
Batas ini paling kuat saat perannya tetap spesifik: tolak konteks request browser yang tidak dimaksudkan untuk endpoint, pertahankan pengecualian eksplisit bagi alur cross-site yang sah, serta pisahkan pemeriksaan identitas dan otorisasi. Dengan pola tersebut, header Sec-Fetch-* menambahkan lapisan isolasi ringkas tanpa diperlakukan sebagai sistem access control lengkap.