Suntikan SQL ialah kaedah serangan biasa yang memintas pengesahan keselamatan aplikasi dengan menyuntik pertanyaan SQL penyerang dengan input berniat jahat. Serangan jenis ini biasanya dilihat dalam aplikasi web, di mana PHP adalah bahasa pengaturcaraan yang digunakan secara meluas. Dalam PHP, pengaturcara aplikasi boleh menggunakan teknik berikut untuk menghalang suntikan SQL.
PHP menyediakan teknologi yang dipanggil pernyataan yang disediakan, yang merupakan cara selamat untuk mencegah suntikan SQL. Penyataan yang disediakan ialah teknik yang memisahkan rentetan pertanyaan dan parameter pertanyaan sebelum melaksanakan pertanyaan SQL. Menggunakan teknik ini, penyerang tidak boleh menyuntik kod hasad ke dalam parameter pertanyaan, sekali gus melindungi aplikasi daripada serangan. Berikut ialah contoh pernyataan yang disediakan:
$stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ? AND password = ?"); $stmt->bind_param("ss", $username, $password); $stmt->execute();
Dalam contoh ini, rentetan pertanyaan SQL ialah "PILIH * DARI pengguna WHERE nama pengguna = ? DAN kata laluan = ?" . Fungsi bind_param() digunakan untuk mengikat pembolehubah kepada parameter pernyataan yang disediakan. Dengan cara ini, apa sahaja parameter yang dimasukkan, ia akan diabaikan dan diluluskan dengan selamat dalam pertanyaan.
Pengesahan input ialah cara yang berkuasa untuk menghalang suntikan SQL. Ia ialah teknik yang menyemak data input pengguna untuk memastikan ia sepadan dengan jenis, format dan panjang yang dijangkakan. Dalam PHP, anda boleh menggunakan ungkapan biasa atau fungsi penapis untuk mengesahkan input. Contohnya:
if (!preg_match("/^[a-zA-Z0-9]{8,}$/", $password)) { echo "Invalid password format"; exit; }
Dalam contoh ini, fungsi preg_match() menggunakan ungkapan biasa untuk menyemak sama ada format kata laluan adalah sah. Jika tidak sah, program akan memaparkan mesej ralat dan keluar.
Dalam PHP, anda boleh menggunakan mysqli_real_escape_string() atau addslashes() fungsi untuk melepaskan input pengguna. Fungsi ini menukar aksara khas seperti petikan tunggal dan berganda kepada aksara melarikan diri mereka untuk mengelakkan serangan suntikan SQL. Contohnya:
$username = mysqli_real_escape_string($mysqli, $_POST['username']); $password = mysqli_real_escape_string($mysqli, $_POST['password']); or $username = addslashes($_POST['username']); $password = addslashes($_POST['password']);
Dalam contoh ini, fungsi mysqli_real_escape_string() digunakan untuk melarikan diri daripada nilai input $post['username'] dan $post['password']. Watak garis miring belakang menghalang petikan tunggal atau berganda daripada ditafsirkan sebagai petikan penutup dalam pertanyaan SQL. Fungsi addslashes() juga menjalankan tugas yang sama, ia melepaskan aksara khas.
Ringkasnya, untuk mengelakkan serangan suntikan SQL, pengaturcara harus menggunakan pernyataan yang disediakan, pengesahan input dan teknik melarikan diri. Teknik ini boleh mengurangkan kelemahan dan kelemahan yang boleh dieksploitasi oleh penyerang. Pada masa yang sama, pembangun aplikasi harus memahami kaedah serangan biasa suntikan SQL untuk meningkatkan keselamatan aplikasi.
Atas ialah kandungan terperinci Kemahiran pelaksanaan PHP untuk mencegah suntikan SQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!