Background Image

Postingan

Keamanan Web dengan PHP: Cara Mencegah SQL Injection

Prepared statement adalah cara paling aman dan direkomendasikan untuk berinteraksi dengan database.

Gambar Keamanan Web dengan PHP: Cara Mencegah SQL Injection
29 Juli 2025 10:13 Joliana Fardha PHP

1. Gunakan Prepared Statements dengan PDO

Prepared statement adalah cara paling aman dan direkomendasikan untuk berinteraksi dengan database.

Contoh:

<?php

$pdo = new PDO("mysql:host=localhost;dbname=nama_db", "username", "password");

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");

$stmt->bindParam(':username', $username);

$stmt->execute();

$data = $stmt->fetchAll();

?>

Mengapa aman?

  • Parameter :username tidak akan dievaluasi sebagai bagian dari query SQL.
  • Database akan memproses parameter sebagai data, bukan sebagai perintah SQL.

2. Gunakan MySQLi dengan Prepared Statements

Jika kamu menggunakan MySQLi, kamu juga bisa menggunakan prepared statements:

<?php

$conn = new mysqli("localhost", "username", "password", "nama_db");

$stmt = $conn->prepare("SELECT * FROM users WHERE email = ?");

$stmt->bind_param("s", $email);

$stmt->execute();

$result = $stmt->get_result();

?>

3. Validasi dan Sanitasi Input

  • Validasi memastikan data memiliki format yang benar (misal: email valid, angka positif, dsb).
  • Sanitasi menghapus karakter yang berpotensi berbahaya.

Contoh:

$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);

$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);

Catatan: Meskipun sanitasi membantu, ini tidak cukup sendiri untuk mencegah SQL Injection, tapi bagus untuk praktik keamanan secara umum.

4. Hindari Query Dinamis

Jangan pernah menyusun query SQL dengan menggabungkan input pengguna langsung ke dalam string SQL.

Contoh buruk (rentan):

$sql = "SELECT * FROM users WHERE username = '" . $_POST['username'] . "'";

Ini membuka celah SQL injection.

5. Gunakan Hak Akses Database yang Tepat

Jangan gunakan user database dengan hak istimewa penuh (root). Gunakan user dengan hak akses terbatas hanya untuk kebutuhan aplikasi.

6. Sembunyikan Pesan Error SQL

Jangan tampilkan pesan error SQL ke pengguna. Gunakan try-catch untuk menangani error secara elegan.

Contoh:

try {

    $pdo->query("SOME QUERY");

} catch (PDOException $e) {

    error_log($e->getMessage());

    echo "Terjadi kesalahan. Silakan coba lagi.";

}

Kesimpulan

Untuk mencegah SQL Injection dalam PHP:

✅ Gunakan Prepared Statements (PDO atau MySQLi)
✅ Lakukan validasi dan sanitasi input
Hindari query dinamis
✅ Gunakan hak akses terbatas
Tangani error dengan aman

Postingan Terkait