Rumah >pembangunan bahagian belakang >tutorial php >Apakah Injeksi SQL? dan cara mencegah

Apakah Injeksi SQL? dan cara mencegah

Barbara Streisand
Barbara Streisandasal
2024-12-31 17:28:38308semak imbas

SQL Injection คืออะไร? และวิธีการป้องกัน

Suntikan SQL

Ia adalah serangan keselamatan yang biasa dalam sistem pangkalan data yang menggunakan SQL (Bahasa Pertanyaan Berstruktur) sebagai bahasa untuk pengurusan pangkalan data. Serangan ini berlaku apabila penyerang menyuntik kod SQL berniat jahat ke dalam medan input pengguna, seperti medan borang atau URL, untuk mengakses atau mengubah suai data secara tidak wajar dalam pangkalan data.

SQL Injection berada di kedudukan #3 dalam 10 Teratas OWASP 2021, senarai kerentanan keselamatan yang paling biasa dan penting untuk aplikasi web oleh Open Web Application Security Project (OWASP) Ini dikemas kini setiap kali. selama beberapa tahun untuk mencerminkan perubahan ancaman siber

SQL Injection คืออะไร? และวิธีการป้องกัน

Serangan suntikan SQL disenaraikan sebagai ancaman #3, menunjukkan kepentingan dan kelaziman isu ini dari segi keselamatan aplikasi web. Menangani serangan suntikan dengan betul adalah penting untuk menjamin sistem maklumat dan mencegah akses yang tidak diingini

Bagaimana untuk menyerang SQL Injection

Serangan Suntikan SQL boleh dilakukan dalam pelbagai cara, tetapi dua yang paling biasa ialah:

  • Memasukkan nilai terus ke dalam medan input
  • Mengedit URL untuk menambah pernyataan SQL

Contoh serangan SQL Injection

Andaikan terdapat aplikasi web yang membenarkan pengguna log masuk, dengan kod PHP

<?php
$username = $_POST['username'];
$password = $_POST['password'];

$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$result = mysqli_query($conn, $query);

if (mysqli_num_rows($result) > 0) {
    echo "Login successful!";
} else {
    echo "Invalid username or password.";
}
?>

Kod ini terdedah kerana memasukkan nilai pengguna terus ke dalam pernyataan SQL boleh menyebabkan suntikan SQL

Serangan Suntikan SQL

Penggodam boleh memasukkan nilai berniat jahat ke dalam medan seperti ini

  • Medan nama pengguna ' ATAU '1'='1
  • medan kata laluan ' ATAU '1'='1

Ini menjadikan pernyataan SQL kelihatan seperti ini

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

Kerana '1'='1' adalah syarat yang sentiasa benar. Perintah ini mengembalikan maklumat untuk setiap pengguna dalam pangkalan data. Ini membolehkan penggodam log masuk tanpa menggunakan kata laluan sebenar

Bagaimana untuk mengelakkan Suntikan SQL

Terdapat beberapa cara untuk mencegah SQL Injection seperti

  • Menggunakan Penyata Disediakan
  • Menggunakan Prosedur Tersimpan
  • Menapis dan mengesahkan data input. ## Contoh penggunaan Penyata Disediakan dalam PHP
<?php
$stmt = $conn->prepare("SELECT * FROM users WHERE username=? AND password=?");
$stmt->bind_param("ss", $username, $password);

$username = $_POST['username'];
$password = $_POST['password'];

$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows > 0) {
    echo "Login successful!";
} else {
    echo "Invalid username or password.";
}
?>

Dalam contoh ini, pernyataan SQL disediakan terlebih dahulu, dan nilai $nama pengguna dan $kata laluan dimasukkan ke dalam pernyataan itu kemudian. Ini menjadikannya mustahil untuk menyuntik kod SQL berniat jahat

meringkaskan

SQL Injection adalah ancaman yang serius. Tetapi ini boleh dicegah dengan menulis kod selamat, seperti menggunakan Penyata Disediakan dan mengesahkan input. Perlindungan yang baik bukan sahaja membantu memastikan data anda selamat. Tetapi ia juga membantu mengekalkan kebolehpercayaan sistem.

Atas ialah kandungan terperinci Apakah Injeksi SQL? dan cara mencegah. 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