0Pricing
PHP Academy · Pelajaran

Injeksi SQL dan Kueri Berparameter

Hilangkan risiko injeksi dengan selalu menggunakan pernyataan terpraproses bersama PDO.

Injeksi SQL dan Kueri Berparameter adalah pelajaran PHP Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar PHP Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus PHP Academy mencakup 4 pelajaran total.

Apa itu Injeksi SQL?

Injeksi SQL terjadi ketika data yang diberikan pengguna disisipkan langsung ke dalam kueri SQL, sehingga penyerang dapat memanipulasi kueri untuk mengakses, mengubah, atau menghapus data.

Contoh Klasik

Menggabungkan masukan pengguna ke dalam SQL:

<?php
// VULNERABLE: attacker enters username = "' OR '1'='1"
$sql = "SELECT * FROM users WHERE username = '".$_GET["username"]."'";
// Becomes: SELECT * FROM users WHERE username = '' OR '1'='1'
// Returns ALL users!

Contoh Eksfiltrasi Data

Penyerang menggunakan UNION SELECT untuk membocorkan data dari tabel lain.

// Input: ' UNION SELECT username, password FROM admin_users--
// This appends a second SELECT returning admin credentials

Pernyataan Terparametrisasi adalah Solusinya

Dengan pernyataan terparametrisasi, struktur kueri ditetapkan sebelum data apa pun diberikan. Basis data memperlakukan semua nilai yang diikat sebagai data literal—tidak pernah sebagai kode SQL.

<?php
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$_GET["username"]]);
// Safe even if username = "' OR 1=1--"

Penanda Tempat Bernama

Penanda tempat bernama lebih jelas, terutama jika terdapat banyak parameter.

<?php
$stmt = $pdo->prepare(
    "SELECT * FROM users WHERE email = :email AND active = :active"
);
$stmt->execute([":email" => $email, ":active" => true]);

Eloquent Aman Secara Default

Eloquent Laravel menggunakan pernyataan terparametrisasi PDO secara internal untuk semua operasi pembuat kueri standar.

<?php
// Safe:
User::where("email", $email)->first();

// UNSAFE: raw query with user input!
DB::select("SELECT * FROM users WHERE email = ".$email);

Kueri Mentah

Saat Anda harus menggunakan SQL mentah di Laravel, selalu gunakan pengikatan parameter.

<?php
// Safe raw query:
$users = DB::select("SELECT * FROM users WHERE email = ?", [$email]);

// Or with named bindings:
$users = DB::select("SELECT * FROM users WHERE email = :email", [":email" => $email]);

Injeksi pada Klausa LIKE

Klausa LIKE memerlukan penanganan khusus—karakter pengganti (%, _) harus diloloskan secara manual sebelum diikat.

<?php
$search = str_replace(["%", "_", "\\"], ["\%", "\_", "\\\\"], $userInput);
$stmt = $pdo->prepare("SELECT * FROM products WHERE name LIKE ?");
$stmt->execute(["%$search%"]);

Injeksi pada ORDER BY

Nama kolom dan arah ORDER BY tidak dapat dijadikan parameter. Validasi keduanya berdasarkan daftar putih.

<?php
$allowedColumns = ["name", "price", "created_at"];
$col = in_array($request->sort, $allowedColumns) ? $request->sort : "name";
$dir = $request->dir === "desc" ? "desc" : "asc";
// Then safely build the query string

Prosedur Tersimpan

Prosedur tersimpan juga dapat rentan jika secara internal menggabungkan masukan. Selalu gunakan pemanggilan berparameter.

Prinsip Hak Akses Minimum

Pengguna basis data yang terhubung dari PHP hanya boleh memiliki SELECT/INSERT/UPDATE/DELETE pada tabel yang diperlukan—tidak pernah memiliki hak CREATE, DROP, atau hak administrator.

Ringkasan

ALWAYS gunakan pernyataan terparametrisasi dengan parameter yang diikat. Jangan pernah menggabungkan masukan pengguna ke dalam SQL. Validasi ORDER BY dan nama kolom berdasarkan daftar putih. Gunakan PDO dengan persiapan yang diemulasikan dinonaktifkan.

Pemeriksaan Cepat

Apa cara yang benar untuk melindungi aplikasi dari injeksi SQL?

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Injeksi SQL dan Kueri Berparameter” gratis?

Ya — teks lengkap “Injeksi SQL dan Kueri Berparameter” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus PHP Academy, upgrade ke CoddyKit PRO. Kursus PHP Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Injeksi SQL dan Kueri Berparameter”?

Hilangkan risiko injeksi dengan selalu menggunakan pernyataan terpraproses bersama PDO. Kamu berlatih PHP Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai PHP Academy?

Tidak diperlukan pengalaman sebelumnya. PHP Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Injeksi SQL dan Kueri Berparameter” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran PHP Academy ini?

Ya. Setiap pelajaran PHP Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pencegahan Cross-Site Scripting (XSS)
  2. Injeksi SQL dan Kueri Berparameter
  3. Perlindungan CSRF
  4. Penyimpanan Kata Sandi yang Aman
← Kembali ke PHP Academy