DEV Community

Cover image for Praktikum Keamanan Web: SQL Injection di MySQL & Website PHP πŸ˜±πŸ”’πŸš€
ahmadasroni38
ahmadasroni38

Posted on

Praktikum Keamanan Web: SQL Injection di MySQL & Website PHP πŸ˜±πŸ”’πŸš€

Halo, teman-teman mahasiswa! Kali ini kita bahas SQL Injection (SQLi) di MySQL dengan PHP native – topik klasik yang wajib dikuasai setiap web developer. Bayangkan website PHP kamu kayak rumah mewah, tapi kalau kodemu rentan SQLi, hacker bisa masuk seenaknya: baca data user, hapus database, atau login jadi admin tanpa password. Serem tapi seru belajarnya!

Kita pakai contoh sederhana, kode mudah dicoba (pakai XAMPP atau lokal), dan ilustrasi keren biar langsung paham. Yuk, jadi developer pro yang secure dari awal! 😎

Kartun hacker lagi "nyuntik" kode SQL ini bikin langsung ngerti bahayanya – jangan ditiru ya, ini edukasi! πŸ˜‚

Visual lucu ini nunjukin proses serangan SQLi – hacker senang, developer nangis!

Apa Itu SQL Injection di MySQL? πŸ€”

SQLi terjadi saat PHP gabungin input user (dari form atau URL) langsung ke query MySQL tanpa sanitasi. MySQL pakai ' untuk string dan -- untuk komentar.

Query rentan contoh:

$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
Enter fullscreen mode Exit fullscreen mode

Input jahat bisa ubah query jadi apa saja!

Diagram proses step-by-step ini super jelas – dari input user sampai database kena hack.

Infografis ini gambarin alur serangan secara visual – mind blowing!

Contoh 1: Login Bypass Klasik (Paling Populer!) πŸ”‘

File: login.php (rentan)

<?php
$username = $_POST['username'];
$password = $_POST['password'];

$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = mysqli_query($conn, $query);

if (mysqli_num_rows($result) > 0) {
    echo "Login sukses! Selamat datang admin 😈";
}
?>
Enter fullscreen mode Exit fullscreen mode

Input normal: username = "budi", password = "rahasia"

Input jahat: username = "admin' -- ", password = apa saja

Query jadi:

SELECT * FROM users WHERE username = 'admin' -- ' AND password = 'apa saja';
Enter fullscreen mode Exit fullscreen mode

-- komentar, password diabaikan β†’ Login sukses tanpa tahu password!

Visual bypass login ini klasik banget – langsung paham kenapa berbahaya!

Contoh lain bypass autentikasi – hacker masuk gratis!

Contoh 2: Dump Data dengan UNION πŸ“Š

File: detail.php?id=1 (rentan)

$id = $_GET['id'];
$query = "SELECT nama, email FROM users WHERE id = '$id'";
Enter fullscreen mode Exit fullscreen mode

Input jahat: ?id=1' UNION SELECT username, password FROM users --

Query tampilkan semua username + password! Hacker dapat data sensitif.

Contoh 3: Error-Based (Cek Rentan)

Masukin ' di input β†’ Kalau muncul error MySQL (seperti "You have an error in your SQL syntax"), berarti rentan!

Cara Aman di PHP & MySQL (Wajib!) πŸ›‘οΈβœ¨

Jangan pakai concatenation! Pakai:

  1. PDO dengan Prepared Statements (Terbaik & Modern)
   $stmt = $pdo->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
   $stmt->execute([$username, $password]);
   $user = $stmt->fetch();
Enter fullscreen mode Exit fullscreen mode
  1. mysqli_prepare
   $stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
   $stmt->bind_param("ss", $username, $password);
   $stmt->execute();
Enter fullscreen mode Exit fullscreen mode

Input jahat jadi string biasa, nggak dieksekusi sebagai kode!

Diagram comparison vulnerable vs prepared statements – lihat bedanya, aman total!

Visual PDO secure vs code rentan di PHP – pakai ini selalu!

Cheat sheet prevention ini dari expert – bookmark ya!

Bonus: Vulnerable vs Secure Code

Rentan (Jangan!) Aman (Wajib!)
"$username" langsung di query Prepared statements dengan ? atau :param
mysqli_query($conn, $query) PDO atau mysqli_prepare + bind + execute

Latihan Seru Buat Kamu! πŸ’ͺπŸ”₯

  1. Buat login.php rentan, test bypass sendiri di localhost.
  2. Perbaiki pakai PDO, test lagi (harusnya gagal bypass!).
  3. Coba UNION attack di halaman detail.
  4. Tambahin password_hash() + password_verify() biar lebih pro.

Selamat praktikum, guys! SQL Injection ini bahaya besar di PHP MySQL, tapi dengan prepared statements, website kamu aman kayak benteng πŸ”₯ Ingat: Never trust user input! Keep coding safely and have fun! πŸŽ‰πŸ”πŸ˜

Top comments (0)