Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mengelakkan serangan suntikan kata kunci SQL dalam pembangunan bahasa PHP?

Bagaimana untuk mengelakkan serangan suntikan kata kunci SQL dalam pembangunan bahasa PHP?

WBOY
WBOYasal
2023-06-10 17:41:511242semak imbas

Dengan perkembangan Internet, serangan suntikan SQL telah menjadi masalah serius dalam keselamatan rangkaian. Serangan suntikan SQL merujuk kepada kaedah serangan di mana penyerang menggunakan kelemahan aplikasi web untuk menyerahkan pernyataan SQL yang berniat jahat kepada pelayan untuk mencapai akses haram dan mencuri data sensitif. Sebagai salah satu bahasa pengaturcaraan yang paling banyak digunakan dalam pembangunan web, bahasa PHP juga menghadapi risiko serangan suntikan SQL. Dalam artikel ini, kami akan memperkenalkan cara untuk mengelakkan serangan suntikan kata kunci SQL dalam pembangunan bahasa PHP.

1. Fahami serangan suntikan SQL

Sebelum menghalang serangan suntikan SQL, kita perlu memahami konsep dan prinsip asas serangan suntikan SQL. Serangan suntikan SQL terutamanya menggunakan aplikasi web untuk menapis data input pengguna secara salah, dan menghantar input pengguna terus ke pangkalan data bahagian belakang sebagai sebahagian daripada pernyataan SQL, membenarkan penyerang menyerang dan mengawal pangkalan data melalui pernyataan SQL yang berniat jahat. Sebagai contoh, coretan kod berikut mungkin berisiko serangan suntikan SQL:

<?php
//连接数据库
$con=mysqli_connect("localhost","username","password","my_db");

//获取用户提交的用户名和密码
$username=$_POST['username'];
$password=$_POST['password'];

//构造SQL语句
$sql="SELECT * FROM users WHERE username='".$username."' AND password='".$password."'";

//执行SQL语句
$result=mysqli_query($con,$sql);

// 输出查询结果
while($row=mysqli_fetch_array($result,MYSQLI_ASSOC)){
    echo $row['username']. " " . $row['password'];
}

//关闭数据库连接
mysqli_close($con);
?>

Dalam kod di atas, data yang diserahkan oleh pengguna boleh dihantar terus ke pangkalan data SQL sebagai sebahagian daripada pernyataan SQL, dan penyerang boleh mengeksploitasi Beberapa cara menghantar pernyataan SQL berniat jahat ke dalam pangkalan data untuk menyerang dan mengawal pangkalan data. Contohnya, apabila kata laluan yang dihantar oleh pengguna ialah "123' ATAU 1=1--", pangkalan data akan melaksanakan pernyataan SQL berikut:

SELECT * FROM users WHERE username='user' AND password='123' OR 1=1--'

Pernyataan SQL ini akan menanyakan maklumat semua pengguna dalam pangkalan data, kerana "1=1" sentiasa benar.

2. Kaedah untuk mengelakkan serangan suntikan SQL

Untuk mengelakkan serangan suntikan SQL, kita perlu mengambil beberapa langkah untuk melindungi aplikasi web daripada serangan. Berikut ialah beberapa kaedah biasa:

  1. Gunakan pertanyaan berparameter

Pertanyaan berparameter ialah cara yang berkesan untuk mengelakkan serangan suntikan SQL. Kaedah ini menggunakan penyataan dan parameter SQL yang telah ditetapkan, dan memberikan nilai parameter sebagai input kepada pangkalan data untuk dilaksanakan. Kaedah ini boleh menghalang data yang dimasukkan pengguna daripada disambung terus ke dalam pernyataan SQL, dengan itu melindungi aplikasi web daripada serangan suntikan SQL. Contohnya, kod berikut menggunakan pertanyaan berparameter:

<?php
//连接数据库
$con=mysqli_connect("localhost","username","password","my_db");

//获取用户提交的用户名和密码
$username=$_POST['username'];
$password=$_POST['password'];

//构造SQL语句
$sql="SELECT * FROM users WHERE username=? AND password=?";

//创建预处理语句
$stmt=mysqli_prepare($con,$sql);

//绑定参数值
mysqli_stmt_bind_param($stmt,"ss",$username,$password);

//执行SQL语句
mysqli_stmt_execute($stmt);

// 迭代查询结果
$result=mysqli_stmt_get_result($stmt);
while($row=mysqli_fetch_array($result,MYSQLI_ASSOC)){
    echo $row['username']. " " . $row['password'];
}

//关闭数据库连接
mysqli_close($con);
?>
  1. Menapis data input

Sebelum memproses data input pengguna, kami boleh menapisnya, sekali gus memastikan jantina keselamatannya. Sebagai contoh, kita boleh menggunakan fungsi terbina dalam PHP strip_tags(), addslashes(), dsb. untuk menapis data input pengguna. Fungsi ini boleh menapis keluar teg HTML, melepaskan aksara khas, dsb. dalam input pengguna, dengan itu mengurangkan risiko serangan suntikan SQL. Contohnya:

<?php
//连接数据库
$con=mysqli_connect("localhost","username","password","my_db");

//获取用户提交的用户名和密码
$username=$_POST['username'];
$password=$_POST['password'];

//过滤用户输入数据
$username=mysqli_real_escape_string($con,strip_tags($username));
$password=mysqli_real_escape_string($con,strip_tags($password));

//构造SQL语句
$sql="SELECT * FROM users WHERE username='".$username."' AND password='".$password."'";

//执行SQL语句
$result=mysqli_query($con,$sql);

// 输出查询结果
while($row=mysqli_fetch_array($result,MYSQLI_ASSOC)){
    echo $row['username']. " " . $row['password'];
}

//关闭数据库连接
mysqli_close($con);
?>

Dalam kod di atas, kami menggunakan fungsi mysqli_real_escape_string() dan strip_tags() untuk menapis data input pengguna dan memastikan keselamatannya.

3. Ringkasan

Serangan suntikan SQL ialah masalah keselamatan biasa dalam aplikasi web, yang boleh menyebabkan kerugian yang tidak terukur kepada pangkalan data dan data pengguna. Untuk mengelakkan serangan suntikan SQL, kita harus memastikan ketepatan data input, menapis data input pengguna, menggunakan pertanyaan berparameter dan kaedah lain untuk mengukuhkan keselamatan aplikasi web. Sebagai pembangun, kami perlu sentiasa mempelajari dan memahami teknologi keselamatan terkini untuk memastikan keselamatan aplikasi web.

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