Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk mengelakkan serangan suntikan SQL dalam pembangunan PHP

Bagaimana untuk mengelakkan serangan suntikan SQL dalam pembangunan PHP

WBOY
WBOYasal
2023-06-27 20:53:371328semak imbas

Cara mencegah serangan suntikan SQL dalam pembangunan PHP

Serangan suntikan SQL merujuk kepada membina pernyataan SQL secara dinamik dalam aplikasi web dan kemudian melaksanakan pernyataan SQL ini pada pangkalan data, membenarkan penyerang melakukan operasi berniat jahat atau mendapatkan data sensitif. Sebagai tindak balas kepada kaedah serangan ini, pembangun perlu mengambil langkah perlindungan untuk memastikan keselamatan aplikasi web. Artikel ini akan memperkenalkan cara untuk mencegah serangan suntikan SQL dalam pembangunan PHP.

  1. Parameter binding

Dalam PHP, anda boleh menggunakan PDO atau pustaka sambungan mysqli untuk melaksanakan pengikatan parameter dan melaksanakan pernyataan SQL dan parameter input secara berasingan. Kaedah ini boleh menghalang parameter daripada mengandungi aksara dan pernyataan pengecualian SQL dan mengelakkan serangan suntikan SQL dalaman.

Ambil PDO sebagai contoh, kodnya adalah seperti berikut:

//准备SQL语句
$sql = "SELECT name, age, email FROM user WHERE id = :id AND age > :age";
$stmt = $pdo->prepare($sql);
 
//绑定参数
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$stmt->bindParam(':age', $age, PDO::PARAM_INT);
 
//执行查询语句
$stmt->execute();
  1. String escape

Sebelum menyimpan data input pengguna ke dalam pangkalan data, anda perlu menggunakan fungsi escape untuk melarikan diri dari rentetan. Dalam PHP, fungsi mysql_real_escape_string() dan mysqli_real_escape_string() boleh mencapai escape. Kaedah ini adalah langkah pencegahan peringkat rendah dan disyorkan untuk digunakan bersama dengan langkah perlindungan lain yang lebih selamat.

Contoh kod:

//获取用户输入
$username = $_POST['username'];
$password = $_POST['password'];

//转义字符串
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);

//准备SQL,然后查询
$sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
mysql_query($sql);
  1. Pemeriksaan input

Pemeriksaan input merujuk kepada menapis dan mengesahkan parameter input untuk memastikan bahawa input adalah sah dan mematuhi jenis dan format yang diharapkan. Pendekatan ini mengelakkan beberapa potensi kelemahan suntikan SQL. Sebagai contoh, jika parameter pertanyaan ialah nombor, anda boleh menggunakan fungsi is_numeric() untuk menyemak sama ada ia adalah nombor. Jika parameter pertanyaan ialah rentetan, anda boleh menggunakan fungsi ctype_alpha() untuk menyemak sama ada ia mengandungi huruf sahaja.

//对用户输入进行检查
if (is_numeric($_GET['id'])) {
    $id = $_GET['id'];
    
    //查询数据库
    $sql = "SELECT * FROM users WHERE id = $id";
    mysql_query($sql);
}
  1. Kawalan kebenaran pangkalan data

Apabila membangunkan aplikasi web, anda boleh menggunakan akaun dan kebenaran tertentu untuk menyambung ke pangkalan data. Pertimbangan yang teliti harus diberikan semasa menyediakan akaun dan kebenaran untuk memastikan bahawa hanya data dan operasi yang diperlukan dibenarkan. Sebagai contoh, akaun baca sahaja tidak boleh melakukan operasi INSERT, UPDATE dan DELETE, yang mengurangkan risiko serangan suntikan SQL.

Ringkasan:

Artikel ini memperkenalkan empat kaedah untuk menghalang serangan suntikan SQL dalam pembangunan PHP, termasuk pengikatan parameter, pelarian rentetan, semakan input dan kawalan kebenaran pangkalan data. Pembangun harus memilih langkah perlindungan yang sesuai berdasarkan senario aplikasi mereka dan keperluan untuk memastikan keselamatan aplikasi web. Pada masa yang sama, menaik taraf versi PHP dan mengemas kini perisian pangkalan data tepat pada masanya juga merupakan cara yang berkesan untuk mencegah serangan suntikan SQL.

Atas ialah kandungan terperinci Bagaimana untuk mengelakkan serangan suntikan SQL dalam pembangunan PHP. 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