Alat pengembang · URL encoder & decoder
Mengkodekan pengalihan URL di dalam parameter kueri tanpa merusaknya
· Cara kerjanya
pengkodean url parameter kueri keamanan sumpah
Menyusun satu URL di dalam yang lain adalah tempat paling umum terjadinya kesalahan pengkodean persen. Posting ini menunjukkan mengapa bagian dalam URL?, & dan = harus dikodekan, bagaimana melakukannya, dan bagaimana memeriksa hasilnya.
Tautan kembali ke yang menghilangkan separuh parameternya — URL bagian dalam & ditelan oleh string kueri bagian luar
Tautan kembali ke yang menghilangkan separuh parameternya adalah pola debug yang ditemui setiap pengembang. Seorang pengguna masuk, aplikasi mencoba mengalihkan ke ?next=https://example.com/page?id=1&user=alice, dan berakhir di example.com/page?id=1. Tanda ampersand di bagian dalam URL diurai sebagai pemisah antara parameter kueri bagian luar. Dua URL dengan pembatas berbeda berarti URL bagian dalam harus dikodekan.
Saat menumpuk satu URL di dalam yang lain sebagai parameter kueri, alamat dalam tersebut menjadi data buram bagi lapisan luar. Tanda tanya, tanda ampersand dan sama dengan tidak boleh dibaca sebagai pembatas struktural. Pengkodean persen mengubahnya: ? menjadi %3F, & menjadi %26, = menjadi %3D. Parser luar kemudian memperlakukan string yang disandikan sebagai satu nilai parameter.
Dua URL, dua set pembatas — mengapa bagian dalam URL hanyalah nilai bagi bagian luar
encodeURIComponent pada bagian dalam yang lengkap URL menghasilkan perlindungan penuh: encodeURIComponent("https://example.com/a?b=1&c=2") mengembalikan "https%3A%2F%2Fexample.com%2Fa%3Fb%3D1%26c%3D2". Setiap karakter struktural menjadi Notasi %XX sehingga parser luar tidak dapat salah mengartikan pembatas bertingkat. Pendekatan pesaing seperti encodeURI membiarkan garis miring dan tanda tanya tidak tersentuh, sehingga menimbulkan kembali ambiguitas saat hasil tersebut menjadi nilai kueri.
Server menerjemahkan kode tepat satu kali. Setelah mengekstraksi parameter berikutnya, satu panggilan decodeURIComponent mengembalikan URL bagian dalam ke bentuk aslinya. Mengurai hasilnya sebagai string kueri baru kemudian melihat struktur parameter yang benar. Penguraian kode ganda merupakan risiko ketika nilai yang sama melewati banyak lapisan; %26 menjadi & setelah satu decode dan tetap & setelah yang kedua.
encodeURIComponent di seluruh bagian dalam URL — apa yang dikodekan, termasuk :, / dan ?
Aturan dasarnya sederhana: karakter apa pun yang memiliki arti dalam sintaksis URL, termasuk : / ? = & #, harus dikodekan persen ketika muncul dalam nilai parameter kueri. Hal ini memastikan parser luar hanya melihat struktur parameter yang Anda inginkan dan bukan pembatas yang tidak disengaja yang tersembunyi di dalam nilai yang Anda teruskan. Gunakan encodeURIComponent untuk menangani pengkodean ini secara lengkap dan andal.
Uji pengkodean ini dalam encoder & decoder URL: tempelkan URL bagian dalam, kodekan dalam mode nilai, amati keluaran %XX. Gunakan mode decoder untuk memverifikasi kecocokan pulang pergi. Alat ini mendemonstrasikan pengkodean ujung ke ujung sehingga Anda dapat menyalin hasilnya langsung ke kode aplikasi Anda dengan percaya diri.
Contoh praktis: membuat ?next=https://example.com/a?b=1&c=2 dengan benar — string yang dikodekan dan dekode di sisi server
Batas keamanan penting berada di samping pengkodean. Server harus memvalidasi bahwa tujuan yang didekodekan benar-benar aman untuk dialihkan. Pengkodean persen membuat struktur URL menjadi jelas; itu tidak membuat URL sembarangan menjadi aman. Kerentanan pengalihan terbuka terjadi ketika aplikasi secara membabi buta mengikuti URL yang diberikan pengguna. Validasi memerlukan daftar yang diizinkan secara eksplisit, verifikasi domain, atau konfirmasi pengguna.
Pengkodean memperbaiki masalah penguraian; validasi memperbaiki masalah keamanan. Ini adalah permasalahan yang terpisah pada lapisan yang berbeda. URL encoder & decoder menunjukkan pengkodean dengan benar. Server harus menambahkan validasi: memeriksa daftar, memverifikasi domain, atau meminta konfirmasi. Tanpa validasi, pengalihan yang dikodekan dengan benar ke domain mana pun tetap dapat dieksploitasi.
Risiko pengalihan terbuka — mengapa server harus memvalidasi tujuan yang didekodekan, bukan hanya mendekodekannya
Kesalahan umum terakumulasi di sini. Pengembang terkadang hanya mengkodekan bagian kueri, membiarkan garis miring tidak tersentuh, sehingga merusak struktur. Yang lain menyandikan seluruh parameter yang dibuat termasuk ?next=, membuat pengkodean ganda. Beberapa memeriksa validitas dengan menguraikan tanpa mendekode, salah membaca struktur yang dikodekan. Membangun dengan encodeURIComponent memastikan konsistensi dan kebenaran dalam setiap kasus.
Kesalahan umum lainnya adalah mempercayai browser untuk memperbaiki parameter yang salah secara otomatis. URL adalah data dan harus diperlakukan persis seperti data. encodeURIComponent adalah alat standar untuk pekerjaan ini. URL encoder & decoder menjaga proses ini tetap lokal sehingga Anda dapat memverifikasi byte yang tepat sebelum dikirim ke produksi.
Kesalahan umum — hanya mengkodekan bagian kueri, atau memercayai browser untuk memperbaikinya
Parameter OAuth redirect_uri mengikuti pola yang sama persis. Server otorisasi meneruskan kontrol ke klien di alamat yang diketahui, sering kali berupa URL lengkap dengan beberapa parameter. Mengkodekannya sebagai nilai tunggal memastikan parameter bertahan dalam pengangkutan, dan klien mendekode satu kali sebelum digunakan. Pengodean yang salah ditangani dalam aliran OAuth menyebabkan token dan parameter panggilan balik hilang di tengah transmisi.
Parameter status di OAuth menggunakan pengkodean yang dikombinasikan dengan tanda tangan kriptografi untuk perlindungan CSRF. Pengidentifikasi fragmen tetap berada di sisi klien dan tidak pernah berpindah ke server. Token pembawa tidak boleh ditempatkan di URL pengalihan apa pun pengkodeannya, karena URL muncul di log, riwayat browser, dan header perujuk.
Apa yang tidak tercakup di sini — Parameter status OAuth dan desain perlindungan CSRF
Strategi pengujian: buat URL bagian dalam Anda dengan parameter nyata, enkode sebagai nilai luar, dekode dalam kode penerima. Pastikan hasil yang didekodekan adalah byte demi byte yang identik dengan aslinya. Gunakan encoder & decoder URL sebelum penerapan produksi. Periksa lalu lintas dan log Jaringan untuk mengonfirmasi kedatangan yang benar dan tidak ada pemotongan atau kerusakan pada data yang dikodekan.
Kesalahan ketik seperti %2e alih-alih %2E mungkin memecahkan kode dengan benar tetapi gagal dalam pemeriksaan bolak-balik di sistem sekunder yang mengharapkan konsistensi. Ketidakcocokan pengkodean antar perpustakaan di berbagai platform jarang terjadi tetapi mungkin terjadi; pengujian perjalanan bolak-balik lengkap menangkap mereka sebelum menyebabkan masalah produksi dan keluhan pelanggan.
Kesimpulan: perlakukan URL bagian dalam sebagai data — bagaimana mode nilai tunggal encoder & decoder URL mengkodekannya sepenuhnya dan decodernya mengonfirmasi perjalanan bolak-balik
Batas pengkodeannya jelas: encodeURIComponent memperlakukan masukan Anda sebagai data buram dan lolos dari setiap karakter kecuali tanda baca yang tidak dicadangkan, sehingga aman untuk disarangkan di lapisan URL mana pun. Batas validasinya terpisah: setelah decoding, verifikasi bahwa tujuannya adalah tujuan yang ingin dituju oleh pengguna. Gunakan encoder & decoder URL untuk melihat pengkodean yang ditunjukkan secara menyeluruh.
Perlakukan URL bagian dalam sebagai data sejak awal. Enkodekan sebagai nilai kueri tunggal, dekodekan tepat satu kali saat diterima, lalu terapkan validasi sebelum mengalihkan. Encoder & decoder URL menunjukkan pengkodean persen dari URL lengkap sebagai nilai kueri tunggal dan memverifikasi perjalanan bolak-balik secara lokal. Pengkodean dan validasi keduanya penting; alat ini menangani pengkodean dengan benar.