Petua Pembangunan PHP: Cara Mencegah Serangan Injeksi SQL
Gambaran Keseluruhan:
Dengan perkembangan Internet, isu keselamatan aplikasi Web telah menarik perhatian lebih dan lebih. Antaranya, serangan suntikan SQL adalah ancaman keselamatan rangkaian biasa. Ia menggunakan input pengguna yang tidak ditapis untuk mengubah suai struktur pernyataan pertanyaan SQL untuk mendapatkan maklumat pangkalan data haram atau mengubah suai data dalam pangkalan data. Dalam pembangunan PHP, kami boleh mengambil beberapa langkah untuk mencegah serangan suntikan SQL dengan berkesan.
Gunakan pertanyaan berparameter
Apabila kami menyambung input pengguna secara langsung ke dalam pernyataan pertanyaan SQL, terdapat risiko suntikan SQL. Untuk mengelakkan risiko ini, kita boleh menggunakan pertanyaan berparameter (penyata yang disediakan). Kaedah pertanyaan ini memisahkan pertanyaan SQL daripada parameter Contoh khusus adalah seperti berikut:
$query = $connection->prepare("SELECT * FROM users WHERE username = :username"); $query->bindParam(':username', $username); $query->execute();
Dalam kod di atas, :nama pengguna ialah pemegang tempat, dan kami menggunakan kaedah bindParam() untuk mengikat parameter sebenar kepada pemegang tempat. Ini memastikan bahawa data yang dimasukkan oleh pengguna tidak akan digunakan sebagai sebahagian daripada pertanyaan SQL, dengan itu berkesan menghalang serangan suntikan SQL.
Dalam PHP, anda boleh menggunakan fungsi penapis untuk menapis input pengguna, seperti filter_var() atau filter_input(). Berikut ialah contoh menapis input pengguna:
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
Dalam kod di atas, fungsi filter_input() menerima tiga parameter: jenis input (boleh INPUT_GET, INPUT_POST, dll.), nama input dan jenis penapis. FILTER_SANITIZE_STRING ialah jenis penapis yang mengalih keluar teg HTML daripada input pengguna dan melepaskan aksara khas.
Selepas menapis, kami juga harus mengesahkan input pengguna untuk memastikan bahawa input sepadan dengan jangkaan kami. Contohnya, untuk medan nama pengguna, kami boleh menggunakan ungkapan biasa untuk mengesahkan bahawa nama pengguna berada dalam format yang betul:
if (!preg_match('/^[a-zA-Z0-9_]{5,20}$/', $username)) { echo "Invalid username format!"; }
Kod di atas menggunakan fungsi preg_match() dan ungkapan biasa untuk mengesahkan format nama pengguna. Jika ia tidak memenuhi jangkaan, anda boleh mengembalikan mesej ralat atau mengambil tindakan lain yang sesuai.
Berikut ialah contoh penggunaan mysqli_real_escape_string() fungsi:
$username = mysqli_real_escape_string($conn, $username); $query = "SELECT * FROM users WHERE username = '$username'"; $result = mysqli_query($conn, $query);
Dalam kod di atas, nama pengguna pertama kali dilarikan menggunakan fungsi mysqli_real_escape_string() dan kemudian nama pengguna yang terlepas dimasukkan ke dalam pernyataan pertanyaan SQL tengah.
Ringkasan:
Suntikan SQL ialah ancaman keselamatan rangkaian biasa Dalam pembangunan PHP, kita boleh mengambil beberapa langkah untuk mencegah ancaman keselamatan ini. Pertama, menggunakan pertanyaan berparameter boleh memisahkan pertanyaan SQL daripada input pengguna, dengan itu berkesan menghalang serangan suntikan SQL. Selain itu, ia juga sangat penting untuk menapis dan mengesahkan input pengguna Anda boleh menggunakan fungsi penapis dan ungkapan biasa untuk memastikan bahawa input pengguna memenuhi jangkaan. Akhir sekali, gunakan fungsi operasi pangkalan data yang selamat, seperti mysqli_real_escape_string() atau fungsi prepare() PDO, untuk mengelakkan serangan suntikan SQL.
Melalui langkah di atas, kami boleh meningkatkan keselamatan aplikasi web kami dan mencegah serangan suntikan SQL dengan berkesan. Semasa proses pembangunan, kita harus sentiasa memberi perhatian kepada isu keselamatan dan mengambil langkah yang sesuai untuk melindungi keselamatan data pengguna.
Atas ialah kandungan terperinci Petua Pembangunan PHP: Cara Mencegah Serangan Suntikan SQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!