Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Petua Pembangunan PHP: Cara Mencegah Serangan Suntikan SQL

Petua Pembangunan PHP: Cara Mencegah Serangan Suntikan SQL

PHPz
PHPzasal
2023-09-20 13:57:061011semak imbas

Petua Pembangunan PHP: Cara Mencegah Serangan Suntikan SQL

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.

  1. 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.

  2. Penapisan dan pengesahan input
    Selain menggunakan pertanyaan berparameter, kami juga harus menapis dan mengesahkan input pengguna. Penapisan merujuk kepada mengalih keluar atau menggantikan aksara yang tidak selamat dalam input pengguna, dan pengesahan merujuk kepada menyemak kesahihan input pengguna.

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.

  1. Gunakan fungsi operasi pangkalan data yang selamat
    Apabila menjalankan operasi pangkalan data, kita harus menggunakan fungsi operasi pangkalan data yang selamat, seperti mysqli_real_escape_string() atau fungsi prepare() PDO. Fungsi ini secara automatik melepaskan aksara khas dalam input pengguna, dengan itu menghalang serangan suntikan SQL.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn