Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bermula dengan PHP: SQL Injection

Bermula dengan PHP: SQL Injection

王林
王林asal
2023-05-20 11:30:102213semak imbas

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:

  1. Gunakan pertanyaan berparameter seperti mysqli atau PDO, dan jangan sambung data yang dimasukkan pengguna secara langsung ke dalam pernyataan SQL.
  2. Lakukan pengesahan dan penapisan yang ketat pada semua data input, seperti mengalih keluar ruang, menapis aksara khas, dsb.
  3. Tetapkan dasar keselamatan program, seperti mengehadkan data yang dimasukkan oleh pengguna untuk mengurangkan risiko suntikan SQL sebanyak mungkin.
  4. Konfigurasikan keselamatan pangkalan data, seperti melarang pentadbir daripada log masuk sebagai pengguna akar, menyekat akses rangkaian, dsb.

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!

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