Pernah nggak sih kepikiran, fitur sesederhana form pencarian di sebuah website e-commerce ternyata bisa jadi pintu masuk buat hacker? Sebagai mahasiswa yang sedang intens belajar pengembangan web, saya menyadari kalau sering kali kita terlalu fokus mengejar fitur agar aplikasi bisa berjalan, sampai lupa sama aspek keamanannya.
Salah satu ancaman yang paling sering ditemui tapi gampang banget terabaikan adalah Cross-Site Scripting atau biasa di singkat XSS. Nah, di artikel kali ini, saya mau share hasil eksperimen saya untuk membongkar bagaimana celah XSS ini bekerja pada form input sederhana, apa dampaknya, dan pastinya gimana cara menambal celah tersebut di PHP.
Pembahasan Utama
- Apa itu XSS?
Secara konsep, XSS terjadi kalau aplikasi web kita menerima data dari user (misalnya dari kolom search atau komentar) dan langsung menampilkannya lagi ke layar tanpa disaring dulu. Masalahnya, kalau user nakal memasukkan kode JavaScript, browser akan mengira itu adalah bagian dari program dan langsung mengeksekusinya.
2. Skenario Eksperimen: Kode yang Rentan (Vulnerable)
Untuk membuktikan hal ini, saya mencoba simulasi fitur "Pencarian Produk" lokal menggunakan PHP. Berikut adalah codingan awal yang belum saya berikan pengaman apa pun:
<?php // KODE RENTAN if (isset($_GET['keyword'])) { $keyword = $_GET['keyword']; // Input langsung dicetak ke layar echo "<h3>Hasil pencarian untuk: " . $keyword . "</h3>"; } ?>
3. Eksekusi Serangan (The Attack)
Untuk menguji celahnya, saya bertindak sebagai attacker. Di kolom pencariannya, saya tidak mengetikkan nama produk, melainkan sebuah payload JavaScript sederhana: <script>alert('Celah XSS Ditemukan!');</script>.
Hasilnya cukup bikin kaget. Browser bukannya menampilkan tulisan tersebut, tapi malah mengeksekusinya dan memunculkan pop-up alert di layar!

Munculnya pop-up ini adalah bukti kuat kalau celah XSS di form tersebut berhasil dibobol. Bayangkan kalau skrip yang dimasukkan itu untuk mencuri data sesi (cookies) pengguna, pastinya bahaya banget.
4. Cara Menambal Celahnya (Mitigasi)
Prinsip utama di keamanan web itu: Never trust user input (jangan pernah percaya sepenuhnya sama input pengguna). Untuk memperbaiki kode PHP tadi, kita butuh fungsi yang bisa "membersihkan" input tersebut. Untungnya, PHP punya fungsi bawaan yang sangat ampuh, yaitu htmlspecialchars().
Fungsi ini bakal mengubah karakter khusus pembentuk tag HTML (seperti < dan >) menjadi karakter teks biasa, sehingga browser tidak akan menganggapnya sebagai perintah coding. Kodenya saya ubah menjadi seperti ini:
<?php // KODE AMAN (MITIGASI) if (isset($_GET['keyword'])) { // Input dibersihkan dulu sebelum dicetak $keyword_bersih = htmlspecialchars($_GET['keyword'], ENT_QUOTES, 'UTF-8'); echo "<h3>Hasil pencarian untuk: " . $keyword_bersih . "</h3>"; } ?>
5. Pembuktian Hasil Perbaikan
Setelah kodenya diperbarui, saya coba jalankan ulang dan memasukkan script berbahaya yang persis sama. Hasilnya? Pop-up alert sudah tidak muncul lagi. Browser sekarang hanya menampilkan skrip tersebut sebagai teks biasa di halaman web. Eksperimen berhasil, dan celah keamanannya sudah tertutup rapat!

Kesimpulan
Dari eksperimen praktikum ini, pelajaran terpenting yang bisa diambil adalah betapa krusialnya melakukan validasi dan sanitasi data. Celah keamanan kecil pada satu kolom input saja bisa berakibat fatal. Penggunaan htmlspecialchars() di PHP adalah langkah awal yang sangat sederhana tapi wajib dibiasakan oleh setiap developer untuk menjaga keamanan data di dalam sistem.
Referensi
- Dokumentasi Resmi PHP:
htmlspecialchars(php.net) - Panduan Keamanan OWASP: Cross Site Scripting (XSS)