Namakan tujuan segera
Misalkan nilai pencarian adalah A&B "C". Dalam komponen pertanyaan URL, ampersand biasanya akan memisahkan parameter, sehingga harus dikodekan sebagai bagian dari nilai sebelum string pertanyaan disusun. Dalam teks HTML, sebuah ampersand dapat memperkenalkan referensi karakter, dan sebuah kurung sudut dapat memperkenalkan markup. Di dalam sebuah string JavaScript literal, tanda kutip dan backslash memiliki sintaks mereka sendiri. Ini adalah tiga konteks pembacaan yang berbeda. Output aman untuk satu tidak secara otomatis aman untuk yang berikutnya. Aplikasi produksi harus menggunakan API platform kontekstual dan template daripada menyusun markup dengan penggabungan string.
Kerjakan batas pertama
Jika kunci pertanyaan adalah q, enkode nilai sebagai satu komponen URL dan kemudian letakkan setelah q=. Ampersands menjadi %26 dan tanda kutip diwakili menurut aturan pengode URL. Mengkodekan seluruh URL yang selesai seolah-olah itu adalah nilai juga akan mengkodekan tanda baca struktural dan menghasilkan alamat yang salah. Jika URL yang dihasilkan ditampilkan sebagai teks tautan di halaman HTML, node teks kemudian membutuhkan representasi HTML-safe. Jika ditempatkan dalam atribut HTML, gunakan serializer atribut-aman, yang memiliki aturan kutipannya sendiri.
- Nilai mentah: A&B “C”
- Komponen URL: enkode karakter pertanyaan terlindung
- Keluaran HTML atau JavaScript: escape untuk tujuan itu
Jangan buat JavaScript sebagai format transportasi
Sebuah skrip mungkin perlu menyimpan nilai asli dalam literal string bertanda kutip, yang memanggil untuk JavaScript string escaping. Itu adalah masalah kode sumber, bukan pengganti untuk encoding komponen URL atau encoding output HTML. Hindari meletakkan input yang tidak dipercaya langsung di dalam sumber skrip dalam baris; menggunakan atribut data atau elemen skrip dengan serialisasi JSON yang hati-hati dapat lebih aman ketika diimplementasikan oleh kerangka kerja yang dipertahankan. MultiVerto JavaScript escape tool menggambarkan karakter string-literal, tetapi tidak dapat menjamin bahwa seluruh aplikasi aman dari injeksi skrip. Keamanan tergantung pada konteks parser yang sebenarnya dan kode sekitarnya.
Dekodi dalam urutan berlawanan
Di ujung penerima, sebuah parser URL mengekstrak q dan persentase-dekode komponen sekali. Sebuah pembaca HTML memproses entitas saat membangun dokumennya; sebuah browser tidak persentase-dekode teks biasa hanya karena itu muncul di halaman. JavaScript menafsirkan escape literalnya sendiri ketika menguraikan kode sumber. Menambahkan dekoder yang salah dapat meninggalkan urutan yang terlihat seperti %26 atau menciptakan data yang kemudian diinterpretasikan sebagai sintaks dalam konteks lain. Jaga nilai mentah asli terpisah dari setiap representasi serial sehingga tampilan yang menghadap pengguna tidak secara tidak sengaja menjadi input pemrosesan berikutnya.
Sebuah daftar cek tinjauan untuk aplikasi nyata
Gambarkan jalur dari nilai sumber ke komponen URL, lalu ke teks atau atribut HTML, dan kemudian ke penggunaan skrip apapun. Pada setiap panah, pilih API untuk tujuan yang tepat dan karakter tes seperti ampersand, quote, tanda kurang dari dan huruf non-ASCII. Periksa halaman yang dihasilkan dan URL yang dianalisis, bukan hanya string yang dienkodekan. Escape tidak memberikan kepercayaan atau memvalidasi target link; periksa kebijakan terpisah masih mungkin diperlukan. Konverter terhubung membantu mendemonstrasikan setiap lapisan dengan contoh kecil sebelum Anda mengimplementasikan dalam kerangka kerja.