Suntikan SQL dan Pertanyaan Berparameter
Hapuskan risiko suntikan dengan sentiasa menggunakan pernyataan disediakan bersama PDO.
Suntikan SQL dan Pertanyaan Berparameter ialah pelajaran PHP Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran PHP Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus PHP Academy merangkumi sejumlah 4 pelajaran.
Apakah Suntikan SQL?
Suntikan SQL berlaku apabila data yang dibekalkan pengguna dimasukkan terus ke dalam pertanyaan SQL, lalu membolehkan penyerang memanipulasi pertanyaan untuk mencapai, mengubah suai atau memadam 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 Pengeluaran Data
Penyerang menggunakan UNION SELECT untuk membocorkan data daripada jadual lain.
// Input: ' UNION SELECT username, password FROM admin_users--
// This appends a second SELECT returning admin credentialsPernyataan Disediakan ialah Penyelesaian
Dengan pernyataan disediakan, struktur pertanyaan ditetapkan sebelum sebarang data diberikan. Pangkalan data menganggap semua nilai terikat sebagai data literal — bukan kod SQL.
<?php
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$_GET["username"]]);
// Safe even if username = "' OR 1=1--"Pemegang Tempat Bernama
Pemegang tempat bernama lebih jelas, khususnya apabila terdapat berbilang parameter.
<?php
$stmt = $pdo->prepare(
"SELECT * FROM users WHERE email = :email AND active = :active"
);
$stmt->execute([":email" => $email, ":active" => true]);Eloquent Selamat Secara Lalai
Laravel Eloquent menggunakan pernyataan disediakan PDO secara dalaman untuk semua operasi pembina pertanyaan standard.
<?php
// Safe:
User::where("email", $email)->first();
// UNSAFE: raw query with user input!
DB::select("SELECT * FROM users WHERE email = ".$email);Pertanyaan Mentah
Apabila anda perlu menggunakan SQL mentah dalam Laravel, sentiasa 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]);Suntikan Klausa LIKE
Klausa LIKE memerlukan pengendalian khas — aksara kad bebas (%, _) mesti di-escape secara manual sebelum pengikatan.
<?php
$search = str_replace(["%", "_", "\\"], ["\%", "\_", "\\\\"], $userInput);
$stmt = $pdo->prepare("SELECT * FROM products WHERE name LIKE ?");
$stmt->execute(["%$search%"]);Suntikan ORDER BY
Nama lajur dan arah ORDER BY tidak boleh dijadikan parameter. Sahkan kedua-duanya berdasarkan senarai 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 stringProsedur Tersimpan
Prosedur tersimpan juga boleh terdedah jika prosedur itu menggabungkan masukan secara dalaman. Sentiasa gunakan panggilan berparameter.
Prinsip Keistimewaan Minimum
Pengguna pangkalan data yang disambungkan daripada PHP hanya patut mempunyai SELECT/INSERT/UPDATE/DELETE pada jadual yang diperlukan — jangan berikan CREATE, DROP atau keistimewaan pentadbir.
Ringkasan
ALWAYS gunakan pernyataan disediakan dengan parameter terikat. Jangan sekali-kali menggabungkan masukan pengguna ke dalam SQL. Sahkan ORDER BY dan nama lajur berdasarkan senarai putih. Gunakan PDO dengan penyediaan emulasi dilumpuhkan.
Semakan Pantas
Apakah cara yang betul untuk melindungi diri daripada suntikan SQL?
Pelajari PHP dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 49
- Pelajaran
- 195
Soalan Lazim
Adakah pelajaran “Suntikan SQL dan Pertanyaan Berparameter” percuma?
Ya — teks penuh “Suntikan SQL dan Pertanyaan Berparameter” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus PHP Academy, tingkat taraf kepada CoddyKit PRO. Kursus PHP Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Suntikan SQL dan Pertanyaan Berparameter”?
Hapuskan risiko suntikan dengan sentiasa menggunakan pernyataan disediakan bersama PDO. Anda berlatih PHP Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan PHP Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran PHP Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Suntikan SQL dan Pertanyaan Berparameter” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran PHP Academy ini?
Ya. Setiap pelajaran PHP Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Pencegahan Penskripan Rentas Tapak (XSS)
- Suntikan SQL dan Pertanyaan Berparameter
- Perlindungan CSRF
- Penyimpanan Kata Laluan Selamat