Rumah >pembangunan bahagian belakang >tutorial php >Apakah Injeksi SQL? dan cara mencegah
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
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
Serangan Suntikan SQL boleh dilakukan dalam pelbagai cara, tetapi dua yang paling biasa ialah:
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
Penggodam boleh memasukkan nilai berniat jahat ke dalam medan seperti ini
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
Terdapat beberapa cara untuk mencegah SQL Injection seperti
<?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
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!