Cara Mencegah SQL Injection dan XSS pada Form PHP (Lengkap dengan Redirect)

eamanan adalah hal penting dalam pengembangan website, terutama saat menangani input dari pengguna. Tanpa perlindungan yang baik, website bisa rentan terhadap serangan seperti SQL Injection dan Cross Site Scripting (XSS).

Pada tutorial ini, kamu akan belajar cara mengamankan form input menggunakan PHP sekaligus melakukan redirect setelah data berhasil disimpan.

Apa Itu SQL Injection dan XSS

SQL Injection adalah teknik serangan yang memanfaatkan celah pada query database. Penyerang bisa menyisipkan perintah SQL berbahaya melalui input form.

Sedangkan XSS adalah serangan yang menyisipkan script berbahaya ke dalam halaman web yang kemudian dijalankan di browser pengguna lain.

Pentingnya Validasi dan Sanitasi Data

Untuk mencegah serangan tersebut, kamu perlu melakukan dua hal:

  • Validasi data (memastikan input sesuai aturan)
  • Sanitasi data (membersihkan input dari karakter berbahaya)

Contoh Implementasi PHP Aman

Berikut contoh kode form yang sudah dilengkapi dengan sanitasi input:

<?php
if (isset($_POST['submit'])) {
    // Menghilangkan spasi dari nama dan alamat
    $nama = trim($_POST['nama']);
    $alamat = trim($_POST['alamat']);
    
    // Mencegah XSS
    $nama = strip_tags($nama);
    $alamat = strip_tags($alamat);
    $nama = htmlentities($nama);
    $alamat = htmlentities($alamat);
    
    // Mendapatkan ID user dari form
    $id = $_POST['id'];
    
    // Koneksi ke database
    $conn = mysqli_connect("localhost", "username", "password", "database");
    
    // Query untuk menyimpan data ke database
    $sql = "UPDATE users SET nama='$nama', alamat='$alamat' WHERE id=$id";
    mysqli_query($conn, $sql);
    
    // Redirect ke halaman edit dengan ID user
    header("Location: edit.php?id=$id");
    exit;
}
?>

Membuat Form Input

Berikut form HTML yang digunakan:

<form action="" method="post">
    <input type="hidden" name="id" value="<?php echo $id; ?>">
    <input type="text" name="nama" value="<?php echo $nama; ?>">
    <input type="text" name="alamat" value="<?php echo $alamat; ?>">
    <input type="submit" name="submit" value="Simpan">
</form>

Penjelasan Kode

  • trim() digunakan untuk menghapus spasi berlebih
  • strip_tags() menghapus tag HTML berbahaya
  • htmlentities() mengubah karakter menjadi entitas aman
  • mysqli_query() menjalankan query ke database
  • header() digunakan untuk redirect

Catatan Penting Keamanan

Meskipun contoh di atas sudah cukup aman untuk dasar, ada beberapa hal yang wajib kamu tingkatkan:

  • Gunakan prepared statement (mysqli atau PDO) untuk mencegah SQL Injection secara maksimal
  • Validasi tipe data, terutama untuk ID
  • Hindari langsung memasukkan variabel ke query
  • Gunakan filter tambahan jika diperlukan

Contoh Lebih Aman (Rekomendasi)

Gunakan prepared statement seperti ini:

$stmt = $conn->prepare("UPDATE users SET nama=?, alamat=? WHERE id=?");
$stmt->bind_param("ssi", $nama, $alamat, $id);
$stmt->execute();

Kesimpulan

Mengamankan form input adalah langkah wajib dalam pengembangan website modern.

Dengan melakukan sanitasi dan validasi data, kamu bisa mencegah serangan seperti SQL Injection dan XSS.

Untuk hasil yang lebih aman, sangat disarankan menggunakan prepared statement agar query database tidak mudah disusupi.

Teknik ini wajib kamu terapkan terutama jika kamu mengembangkan website dengan sistem login, input data, atau portal berita dengan banyak pengguna.

Kalau kamu mau, nanti kita bisa lanjut ke pembahasan keamanan lanjutan seperti CSRF protection dan authentication system.

Tinggalkan Balasan