HyperText Markup Language, atau HTML, adalah bahasa utama untuk halaman web di internet. Ini mencakup dukungan untuk sejumlah bahasa lain yang menambahkan fungsionalitas dan gaya tambahan seperti JavaScript dan CSS. Semua bahasa ini berbasis teks dengan beberapa karakter bermakna yang digunakan untuk memisahkan string literal yang harus dicetak ke browser dan kode yang harus ditafsirkan dan dieksekusi.
Desain ini memiliki beberapa masalah, ini menjadi jelas ketika Anda ingin mencetak salah satu karakter yang berarti ke browser. Contoh karakter terbaik untuk digunakan adalah simbol "kurang dari" dan "lebih besar dari". Masing-masing simbol ini digunakan untuk membuka dan menutup segmen kode dalam HTML. Metode yang benar untuk mencetak karakter ini ke layar dengan aman adalah dengan menggunakan entitas HTML.
Entitas dan keamanan HTML
Berkat karakter-karakter ini yang memiliki arti khusus, Anda harus sangat berhati-hati untuk memastikan bahwa Anda menggantinya dengan versi entitas HTML jika Anda ingin mereka dicetak ke browser. Sayangnya, banyak pengembang web lupa bahwa pengguna dapat mengirimkan masukan ke banyak situs web. Jika input pengguna ini menyertakan karakter yang bermakna dan tidak diganti dengan entitas HTML, dalam proses yang disebut sanitasi, maka situs web memiliki kerentanan Cross-Site Scripting (XSS).
Tip: Jangan mencoba mengirimkan karakter khusus ke situs web dalam upaya menemukan kerentanan XSS. Melakukannya secara teknis meretas dan merupakan pelanggaran pidana kecuali Anda memiliki izin dari pemilik situs web.
Cara kerja entitas HTML (dan terkadang tidak)
Entitas HTML berfungsi karena browser tahu untuk menampilkannya sebagai karakter khusus yang relevan dan tidak memperlakukannya sebagai karakter khusus. Semua entitas HTML dimulai dengan ampersand “&” dan diakhiri dengan titik koma “;”. Sebagian besar karakter diidentifikasi dengan nomor entitas meskipun beberapa karakter khusus juga memiliki nama singkatan. Misalnya "&", "" memiliki nomor entitas "&", "" serta nama entitas "&", "" masing-masing. Browser mengetahui bahwa string ini berarti perlu menampilkan karakter yang relevan.
Tip: Daftar lengkap nama entitas karakter dapat ditemukan di sini, meskipun dukungan nama entitas bervariasi menurut browser.
Dalam kebanyakan kasus, pengguna hanya boleh melihat karakter yang diwakili oleh entitas HTML. Namun, dimungkinkan untuk melihat karakter yang disandikan, biasanya ampersand "&", melalui proses yang disebut "Encoding ganda". Ini terjadi ketika karakter ampersand muncul dalam versi yang disandikannya sendiri. Pengkodean ganda umumnya terjadi ketika input dikodekan dengan benar, seperti yang dikirimkan, namun, ketika sedang dikeluarkan, itu akan disanitasi lagi. Ini menghasilkan ampersand di awal "&" dikodekan untuk kedua kalinya dan muncul sebagai "&", browser kemudian menafsirkan dengan benar itu sebagai string yang harus dicetak sebagai "&" setelah memecahkan kode entitas HTML dan mengabaikan sebagian kesatuan.