Rumah >pembangunan bahagian belakang >masalah PHP >Bagaimana untuk mencegah serangan suntikan SQL dalam aplikasi PHP?
Gunakan pertanyaan parameter seperti ini (menggunakan PDO, pendekatan yang disyorkan):
<code class="php">$username = $_GET['username']; $password = $_GET['password']; $query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";</code>
Ini mengurangkan risiko suntikan SQL. Di luar pertanyaan parameter, kerap mengemas kini perisian PHP dan pangkalan data anda adalah penting. Kelemahan sentiasa ditemui, dan patch menangani isu -isu ini, menghalang penyerang daripada mengeksploitasi kelemahan yang diketahui. Akhirnya, melaksanakan pengesahan input dan pengekodan output yang mantap menguatkan lagi pertahanan anda. Yang paling menonjol dan disyorkan secara meluas ialah
<code class="php">$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ? AND password = ?"); $stmt->execute([$username, $password]);</code>PDO (objek data PHP)
. PDO menawarkan pendekatan pangkalan data-agnostik, yang bermaksud anda boleh menukar sistem pangkalan data (MySQL, PostgreSQL, SQLite, dan lain-lain) dengan perubahan kod minimum. Sokongan pertanyaan parameternya adalah asas kepada interaksi pangkalan data yang selamat. Ia mengendalikan melarikan diri dari watak-watak khas secara automatik, mencegah serangan suntikan. Eloquent menyediakan antara muka yang berorientasikan objek yang elegan untuk interaksi pangkalan data. Ia menjauhkan banyak butiran peringkat rendah, menjadikannya lebih mudah untuk menulis kod selamat. Fasih sememangnya menggunakan pertanyaan parameter, dengan ketara mengurangkan kemungkinan suntikan SQL. Memilih rangka kerja atau perpustakaan yang dipelihara dengan baik dan aktif adalah penting, kerana mereka kerap menerima kemas kini yang menangani kelemahan keselamatan.
digunakan bersamaan dengan pertanyaan parameter. Matlamat sanitisasi input adalah untuk menghapuskan atau melarikan diri dari aksara yang berpotensi berbahaya sebelum mereka mencapai pangkalan data. Jenis data yang berbeza memerlukan teknik sanitisasi yang berbeza. Sebagai contoh, hanya mengeluarkan watak -watak seperti petikan tunggal () mungkin tidak mencukupi; Penyerang boleh menggunakan aksara lain untuk memintas sanitisasi anda. Fungsi -fungsi seperti , yang tidak ditetapkan dan kurang teguh daripada pertanyaan parameter. Penyerang mengeksploitasi kelemahan dengan memanipulasi input pengguna untuk menyuntik kod SQL yang berniat jahat. Berikut adalah beberapa vektor utama:
index.php?id=1
untuk mengubah suai pertanyaan. Penyerang boleh membuat permintaan pos yang berniat jahat untuk menyuntik kod SQL. Kod. Pengendalian ralat yang betul adalah penting untuk mengelakkan ini. Sekiranya parameter untuk prosedur yang disimpan tidak dikendalikan dengan betul, mereka masih boleh terdedah. Ingatlah bahawa pendekatan berlapis menggabungkan pertanyaan parameter, pengesahan input, dan amalan pengekodan yang selamat adalah strategi yang paling berkesan. id
Atas ialah kandungan terperinci Bagaimana untuk mencegah serangan suntikan SQL dalam aplikasi PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!