Perbedaan XSS dan SQL Injection: Definisi & Pencegahan

Cross-Site Scripting (XSS) dan SQL Injection (SQLi) adalah dua kerentanan keamanan web yang paling sering disalahartikan, padahal keduanya menyerang lapisan yang berbeda dan memiliki dampak yang tidak sama. Perbedaan paling mendasar terletak pada sasarannya: XSS menargetkan pengguna akhir (browser client) dengan menyuntikkan skrip berbahaya ke dalam halaman web, sementara SQL Injection menargetkan basis data (database server) dengan memanipulasi kueri SQL untuk mencuri atau merusak data internal aplikasi.

Dalam ekosistem keamanan siber, pemahaman akurat mengenai vektor serangan ini wajib dikuasai oleh pengembang perangkat lunak agar dapat menerapkan lapis pertahanan yang tepat, mulai dari sanitasi input pada form hingga penggunaan parameterized queries.

Matriks Perbandingan XSS vs SQL Injection

Tabel berikut merangkum karakteristik utama yang membedakan XSS dan SQL Injection berdasarkan aspek teknis operasionalnya.

Parameter Cross-Site Scripting (XSS) SQL Injection (SQLi)
Target Utama Pengguna aplikasi (Client-side browser) Basis data aplikasi (Server-side database)
Bahasa Pemrograman Terkait JavaScript, HTML SQL (Structured Query Language)
Dampak Kerusakan Pencurian session cookie, pembajakan akun, redireksi situs Pencurian data sensitif, bypass autentikasi, penghapusan tabel
Titik Kerentanan Kolom input yang merender langsung ke halaman HTML Input pengguna yang digabungkan langsung ke kueri database
Metode Pencegahan Context-aware encoding, Content Security Policy (CSP) Prepared statements, parameterized queries, ORM

Mekanisme Kerja Cross-Site Scripting (XSS)

XSS terjadi ketika sebuah aplikasi web mencakup data yang dimasukkan oleh pengguna ke dalam halaman web yang dihasilkan tanpa melakukan validasi atau encoding terlebih dahulu. Peretas memanfaatkan celah ini untuk mengeksekusi skrip berbahaya—biasanya JavaScript—di dalam browser korban yang sedang membuka halaman tersebut.

Terdapat tiga jenis utama XSS:

  • Stored XSS (Persistent): Skrip berbahaya disimpan secara permanen di dalam database target (misalnya melalui kolom komentar forum). Setiap pengguna yang memuat halaman tersebut akan otomatis menjalankan skrip tersebut.
  • Reflected XSS (Non-Persistent): Skrip dikirimkan melalui URL (misalnya lewat tautan pancingan). Server merefleksikan input tersebut kembali ke browser korban tanpa menyimpannya.
  • DOM-based XSS: Kerentanan terjadi sepenuhnya di sisi klien di mana manipulasi DOM (Document Object Model) mengeksekusi skrip berbahaya secara langsung di browser.

Mekanisme Kerja SQL Injection (SQLi)

SQL Injection terjadi ketika input yang tidak disaring dari pengguna digabungkan secara langsung dengan perintah SQL mentah (raw SQL queries) di sisi server. Hal ini memungkinkan penyerang untuk memanipulasi logika kueri SQL yang dieksekusi oleh database.

Contoh klasik kerentanan SQLi pada kueri autentikasi login:

-- Kueri rentan di backend
SELECT * FROM users WHERE username = 'INPUT_USER' AND password = 'INPUT_PASSWORD';

-- Input penyerang pada kolom username:
admin' --

-- Hasil kueri yang dieksekusi database menjadi:
SELECT * FROM users WHERE username = 'admin' --' AND password = '...';

Tanda minus ganda (--) berfungsi sebagai komentar dalam SQL, membuat database mengabaikan pengecekan kata sandi sehingga penyerang berhasil masuk sebagai admin tanpa mengetahui kata sandi yang sah.

Mitigasi dan Langkah Pengamanan

Mengingat perbedaan vektor serangannya, pendekatan penanggulangan untuk kedua celah ini pun berbeda:

  • Untuk Mencegah XSS: Terapkan output encoding sebelum merender data ke HTML, gunakan header HTTP Content Security Policy (CSP) yang ketat, serta validasi semua data input dari sisi server (server-side validation).
  • Untuk Mencegah SQLi: Gunakan Prepared Statements (Parameterized Queries) pada semua interaksi database. Pendekatan ini memastikan bahwa input pengguna selalu diperlakukan sebagai data murni, bukan bagian dari struktur perintah SQL. Hindari penggunaan konkatenasi string secara langsung pada kueri database.