Rumah > Artikel > pembangunan bahagian belakang > Bermula dengan PHP: SQL Injection
Panduan Bermula PHP: SQL Injection
Dengan perkembangan pesat Internet, aplikasi Web menjadi semakin popular dan keselamatannya telah menjadi isu yang amat membimbangkan. Suntikan SQL ialah kaedah serangan biasa dalam aplikasi web Ia boleh menyebabkan masalah keselamatan yang serius dan menjejaskan operasi biasa aplikasi web. Apabila belajar dan menggunakan PHP, adalah sangat penting untuk memahami dan menguasai pengetahuan berkaitan suntikan SQL.
Suntikan SQL merujuk kepada kaedah serangan di mana penyerang memasukkan pernyataan SQL berniat jahat ke dalam aplikasi web untuk memintas pengesahan, mengakses data pangkalan data dan melakukan operasi yang tidak dibenarkan. Serangan suntikan SQL mengambil kesempatan daripada kepercayaan aplikasi web terhadap data yang dimasukkan pengguna Penyerang memalsukan data yang dimasukkan oleh pengguna dan membenarkan aplikasi web menganggapnya sebagai data yang dipercayai.
Yang berikut mengambil borang log masuk mudah sebagai contoh untuk memperkenalkan prinsip dan langkah pencegahan suntikan SQL.
Dalam PHP, dbms biasanya disambungkan melalui dua sambungan: mysqli dan PDO Artikel ini akan mengambil mysqli sebagai contoh.
Pertama, kami mencipta borang log masuk dan pengguna memasukkan nama pengguna dan kata laluan:
<!DOCTYPE html> <html> <head> <title>Login form</title> </head> <body> <form method="post" action="login.php"> <label for="username">Username:</label> <input type="text" name="username" id="username" required> <br> <label for="password">Password:</label> <input type="password" name="password" id="password" required> <br> <input type="submit" value="Login"> </form> </body> </html>
Seterusnya, kami membandingkan nama pengguna dan kata laluan yang dimasukkan oleh pengguna dengan data dalam pangkalan data, jika mereka sepadan Jika berjaya, log masuk berjaya, jika tidak log masuk gagal.
<?php $db_servername = "localhost"; $db_username = "username"; $db_password = "password"; $db_name = "database_name"; // create connection $conn = mysqli_connect($db_servername, $db_username, $db_password, $db_name); // check connection if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } // get user input $user = $_POST["username"]; $pass = $_POST["password"]; // process user input $sql = "SELECT * FROM users WHERE username='$user' AND password='$pass'"; $result = mysqli_query($conn, $sql); // check result if (mysqli_num_rows($result) > 0) { echo "Login success."; } else { echo "Login failed."; } // close connection mysqli_close($conn); ?>
Kod di atas kelihatan hebat, tetapi ia mempunyai masalah yang serius: ia terdedah kepada serangan suntikan SQL.
Penyerang boleh memasukkan kandungan berikut dalam kotak input nama pengguna dan kata laluan:
' OR '1'='1
Pada masa ini, pernyataan pertanyaan yang dijana ialah:
SELECT * FROM users WHERE username='' OR '1'='1' AND password='' OR '1'='1'
Pernyataan SQL ini akan kembalikan Rekod semua pengguna, jadi tanpa mengira sama ada nama pengguna dan kata laluan yang dimasukkan adalah betul, log masuk akan berjaya. Beginilah cara serangan suntikan SQL berfungsi.
Untuk mengelakkan serangan suntikan SQL, anda perlu berhati-hati semasa mengendalikan data yang dimasukkan pengguna. Berikut ialah beberapa langkah berjaga-jaga:
Ringkasnya, semasa menulis aplikasi web, sama ada menggunakan PHP atau bahasa lain, anda mesti mengambil serius isu serangan suntikan SQL. Hanya dengan mengukuhkan pemahaman dan pencegahan serangan suntikan SQL kita boleh melindungi operasi aplikasi web yang selamat dengan lebih baik.
Atas ialah kandungan terperinci Bermula dengan PHP: SQL Injection. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!