Validasi Query String URL: Teknik, Implementasi, dan Keamanan

Inti Validasi Query String

Validasi query string adalah proses verifikasi data yang dikirimkan melalui parameter URL (setelah tanda tanya '?') untuk memastikan format, tipe data, dan nilai yang diterima sesuai dengan ekspektasi sistem. Tanpa validasi yang ketat, aplikasi rentan terhadap serangan Cross-Site Scripting (XSS), SQL Injection, dan manipulasi logika bisnis.

Metode paling efektif adalah menggunakan pendekatan whitelist (hanya mengizinkan input yang dikenal) dibandingkan blacklist. Berikut adalah tabel perbandingan metode validasi yang umum digunakan:

MetodeKelebihanKekurangan
Regex (Regular Expression)Sangat presisi untuk format spesifikKompleksitas tinggi, sulit dibaca
Schema Validation (Joi/Zod)Struktur rapi, mudah dikelolaMemerlukan library tambahan
Built-in URLSearchParamsNative, ringan, tanpa dependensiHanya memvalidasi keberadaan, bukan isi

Implementasi Teknis dengan JavaScript

Untuk memvalidasi query string di sisi klien atau server (Node.js), gunakan objek URLSearchParams dikombinasikan dengan regex untuk memastikan keamanan data.

// Contoh validasi parameter 'id' (harus angka) dan 'sort' (harus 'asc' atau 'desc')
const urlParams = new URLSearchParams(window.location.search);
const id = urlParams.get('id');
const sort = urlParams.get('sort');

const isIdValid = /^\d+$/.test(id);
const isSortValid = ['asc', 'desc'].includes(sort);

if (isIdValid && isSortValid) {
    console.log('Input valid, memproses data...');
} else {
    console.error('Input tidak valid, hentikan eksekusi.');
}

Strategi Keamanan Query String

Validasi bukan sekadar mengecek tipe data, melainkan memastikan data tersebut aman untuk diproses. Berikut adalah langkah-langkah krusial:

  • Sanitasi Input: Selalu lakukan encoding pada karakter khusus (seperti <, >, ") untuk mencegah XSS.
  • Batasan Panjang: Tentukan panjang maksimum parameter untuk mencegah serangan Buffer Overflow atau Denial of Service (DoS).
  • Tipe Data Eksplisit: Jika parameter seharusnya berupa angka, lakukan konversi (casting) ke integer segera setelah diterima.
  • Gunakan Skema (Schema): Gunakan library seperti Zod atau Joi untuk mendefinisikan kontrak data yang ketat.

Troubleshooting Umum

Seringkali pengembang mengalami masalah saat menangani karakter khusus dalam query string. Pastikan selalu menggunakan encodeURIComponent() saat membangun URL dan decodeURIComponent() saat membaca parameter. Jika parameter mengandung spasi atau simbol, kegagalan validasi sering terjadi karena karakter tersebut tidak ter-escape dengan benar.