Bahasa Melayu

Alat pembangun · URL pengekod & penyahkod

Mengekodkan ubah hala URL dalam parameter pertanyaan tanpa melanggarnya

· Bagaimana ia berfungsi

pengekodan url parameter pertanyaan keselamatan sumpah

URL lengkap dikodkan sebagai nilai parameter pertanyaan tunggal, mengekalkan struktur melalui pengekodan peratus
Ilustrasi vektor ToolAcre asal

Bersarang satu URL di dalam yang lain ialah tempat yang paling biasa peratus pengekodan menjadi salah. Siaran ini menunjukkan mengapa URL dalam ?, & dan = mesti dikodkan, cara melakukannya dan cara menyemak hasilnya.

Pautan kembali ke yang menurunkan separuh parameternya — URL dalam & ditelan oleh rentetan pertanyaan luar

Pautan kembali ke yang menurunkan separuh parameternya ialah corak penyahpepijatan yang ditemui setiap pembangun. Seorang pengguna log masuk, aplikasi cuba mengubah hala ke ?next=https://example.com/page?id=1&user=alice, dan mereka berakhir di example.com/page?id=1. Ampersand dalam URL dalam telah dihuraikan sebagai pemisah antara parameter pertanyaan luar. Dua URL dengan pembatas berbeza bermakna URL dalam mesti dikodkan.

Apabila meletakkan satu URL di dalam yang lain sebagai parameter pertanyaan, alamat dalam itu menjadi data legap ke lapisan luar. Tanda soal, ampersand dan tanda sama tidak boleh dibaca sebagai pembatas struktur. Pengekodan peratus mengubahnya: ? menjadi %3F, & menjadi %26, = menjadi %3D. Penghurai luar kemudian memperlakukan rentetan yang dikodkan sebagai satu nilai parameter.

Dua URL, dua set pembatas — mengapa URL dalam hanyalah nilai kepada yang luar

encodeURIComponent pada bahagian 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 watak struktur menjadi %XNotasi X supaya penghurai luar tidak boleh salah tafsir pembatas bersarang. Pendekatan bersaing seperti encodeURI meninggalkan garis miring dan tanda soal tidak disentuh, memperkenalkan semula kekaburan apabila hasil itu menjadi nilai pertanyaan.

Pelayan menyahkod tepat sekali. Selepas mengekstrak parameter seterusnya, satu panggilan decodeURIComponent memulihkan URL dalam kepada bentuk asalnya. Menghuraikan hasil sebagai rentetan pertanyaan baharu kemudian melihat struktur parameter yang betul. Penyahkodan dua kali adalah risiko apabila nilai yang sama melalui berbilang lapisan; %26 menjadi & selepas satu nyahkod dan kekal & selepas yang kedua.

encodeURIKomponen pada keseluruhan dalaman URL — apakah yang akan dikodkan, termasuk :, / dan ?

Peraturan asasnya mudah: mana-mana aksara yang mempunyai makna dalam sintaks URL, termasuk : / ? = & #, mesti dikodkan peratus apabila ia muncul dalam nilai parameter pertanyaan. Ini memastikan penghurai luar sahaja melihat struktur parameter yang anda maksudkan dan bukan sebarang pembatas tidak sengaja yang tersembunyi di dalam nilai yang anda lalui. Gunakan encodeURIComponent untuk mengendalikan pengekodan ini sepenuhnya dan boleh dipercayai.

Uji pengekodan ini dalam pengekod & penyahkod URL: tampalkan URL dalam, kodkannya dalam mod nilai, perhatikan output %XX. Gunakan mod penyahkod untuk mengesahkan perlawanan pergi dan balik dengan tepat. Alat ini menunjukkan pengekodan hujung ke hujung supaya anda boleh menyalin keputusan terus ke dalam kod aplikasi anda dengan yakin.

Contoh yang berjaya: membina ?next=https://example.com/a?b=1&c=2 dengan betul — rentetan yang dikodkan dan nyahkod pada bahagian pelayan

Sempadan keselamatan kritikal terletak bersama pengekodan. Pelayan mesti mengesahkan bahawa destinasi yang dinyahkod sebenarnya selamat untuk diubah hala. Pengekodan peratus menjadikan struktur URL tidak jelas; ia tidak menjadikan URL sewenang-wenangnya selamat. Kerentanan ubah hala terbuka berlaku apabila aplikasi mengikuti URL yang dibekalkan pengguna secara membuta tuli. Pengesahan memerlukan senarai benar yang jelas, pengesahan domain atau pengesahan pengguna.

Pengekodan membetulkan masalah penghuraian; pengesahan membetulkan masalah keselamatan. Ini adalah kebimbangan yang berasingan pada lapisan yang berbeza. URL pengekod & penyahkod menunjukkan pengekodan dengan betul. Pelayan mesti menambah pengesahan: semak terhadap senarai, sahkan domain atau minta pengesahan. Tanpa pengesahan, ubah hala yang dikodkan dengan betul ke mana-mana domain kekal boleh dieksploitasi.

Risiko ubah hala terbuka — mengapa pelayan mesti mengesahkan destinasi yang dinyahkod, bukan sahaja menyahkodnya

Kesilapan biasa berkumpul di sini. Pembangun kadangkala mengekod sahaja bahagian pertanyaan, meninggalkan garis miring tidak disentuh, yang memecahkan struktur. Lain-lain mengekodkan keseluruhan parameter yang dibina termasuk ?next=, mencipta pengekodan dua kali. Sesetengah menyemak kesahihan dengan menghuraikan tanpa penyahkodan, salah membaca struktur yang dikodkan. Membina dengan encodeURIComponent memastikan ketekalan dan ketepatan dalam setiap kes.

Satu lagi kesilapan biasa ialah mempercayai pelayar untuk membetulkan parameter yang cacat secara automatik. URL ialah data dan mesti dianggap tepat sebagai data. encodeURIComponent ialah alat standard untuk kerja ini. URL pengekod & penyahkod memastikan proses ini setempat supaya anda boleh mengesahkan bait yang tepat sebelum dihantar ke pengeluaran.

Kesilapan biasa — mengekod sahaja bahagian pertanyaan atau mempercayai pelayar untuk membetulkannya

Parameter OAuth redirect_uri mengikut corak yang sama ini dengan tepat. Pelayan kebenaran memberikan kawalan kepada pelanggan di alamat yang diketahui, selalunya URL lengkap dengan berbilang parameter. Pengekodannya sebagai satu nilai memastikan parameter bertahan dalam pengangkutan, dan pelanggan menyahkod sekali sebelum digunakan. Pengekodan yang tidak dikendalikan dalam aliran OAuth menyebabkan token dan parameter panggil balik hilang pada pertengahan penghantaran.

Parameter keadaan dalam OAuth menggunakan pengekodan digabungkan dengan tandatangan kriptografi untuk perlindungan CSRF. Pengecam serpihan kekal di sisi pelanggan dan tidak pernah pergi ke pelayan. Token pembawa tidak boleh diletakkan dalam URL ubah hala tanpa mengira pengekodan, kerana URL muncul dalam log, sejarah pelayar dan pengepala perujuk.

Perkara yang tidak dilindungi ini — parameter keadaan OAuth dan reka bentuk perlindungan CSRF

Strategi ujian: bina dalaman anda URL dengan parameter sebenar, kodkannya sebagai nilai luar, nyahkodkannya dalam kod penerimaan. Sahkan hasil dekod adalah bait-untuk-bait yang sama dengan yang asal. Gunakan URL pengekod & penyahkod sebelum penggunaan pengeluaran. Periksa trafik dan log Rangkaian untuk mengesahkan ketibaan yang betul dan tiada pemotongan atau kerosakan data yang dikodkan.

Silap kesilapan seperti %2e dan bukannya %2E mungkin menyahkod dengan betul tetapi gagal semakan pergi balik dalam sistem sekunder yang mengharapkan konsistensi. Ketakpadanan pengekodan antara perpustakaan merentas platform berbeza jarang berlaku tetapi mungkin; menguji perjalanan pergi dan balik yang lengkap menangkap mereka sebelum mereka menyebabkan isu pengeluaran dan aduan pelanggan.

Bawa pulang: layan URL dalaman sebagai data — cara mod nilai tunggal pengekod & penyahkod URL mengekodnya sepenuhnya dan penyahkodnya mengesahkan perjalanan pergi balik

Sempadan pengekodan adalah jelas: encodeURIComponent menganggap input anda sebagai data legap dan pelepasan aksara dari setiap aksara kecuali tanda baca yang tidak terpelihara, menjadikannya selamat untuk bersarang dalam mana-mana lapisan URL. Sempadan pengesahan adalah berasingan: selepas penyahkodan, sahkan destinasi di mana pengguna ingin pergi. Gunakan URL pengekod & penyahkod untuk melihat pengekodan ditunjukkan hujung ke hujung.

Anggap dalaman URL sebagai data dari mula. Ekodkannya sebagai nilai pertanyaan tunggal, nyahkod tepat sekali apabila diterima, kemudian gunakan pengesahan sebelum mengubah hala. URL pengekod & penyahkod menunjukkan peratus pengekodan mana-mana URL lengkap sebagai nilai pertanyaan tunggal dan mengesahkan perjalanan pergi dan balik secara setempat. Pengekodan dan pengesahan adalah penting; alat ini mengendalikan pengekodan dengan betul.