Rumah > Artikel > pembangunan bahagian belakang > Perlindungan keselamatan PHP: elakkan pendedahan ralat SQL
Dengan perkembangan Internet, serangan rangkaian telah menjadi semakin berleluasa, dan serangan suntikan SQL adalah salah satu kaedah serangan biasa. Suntikan SQL ialah teknik serangan yang menyasarkan aplikasi web Penyerang memasukkan pernyataan SQL yang berniat jahat ke dalam aplikasi untuk mengendalikan pangkalan data secara haram dan mendapatkan maklumat sensitif. Keselamatan data dan sistem mangsa akan terjejas. Oleh itu, keselamatan adalah penting bagi pembangun yang menggunakan PHP untuk membangunkan aplikasi web.
PHP ialah bahasa skrip sebelah pelayan yang sangat popular yang digunakan secara meluas dalam pembangunan aplikasi web. Walau bagaimanapun, jika anda tidak memberi perhatian kepada isu keselamatan, anda mungkin menghadapi beberapa masalah keselamatan dengan mudah semasa pembangunan, termasuk serangan suntikan SQL. Dalam artikel ini, kami akan meneroka cara untuk mengelakkan pendedahan ralat SQL dan meningkatkan keselamatan aplikasi PHP anda.
1. Memahami serangan suntikan SQL
Serangan suntikan SQL ialah teknik serangan yang menyasarkan aplikasi web Penyerang memasukkan pernyataan SQL yang berniat jahat ke dalam aplikasi untuk mencapai operasi dan operasi yang tidak sah pada pangkalan data. Dalam pembangunan PHP, bentuk serangan suntikan SQL yang paling biasa ialah penggabungan rentetan.
Sebagai contoh, apabila kami membangunkan fungsi log masuk pengguna, kod biasa mungkin seperti ini:
$username = $_POST['username']; $password = $_POST['password']; $sql = "SELECT * FROM users WHERE username='$username' AND password='$password'";
Kod ini menggunakan $nama pengguna dan $kata laluan yang diserahkan oleh pengguna untuk membina pertanyaan SQL kenyataan. Tetapi jika penyerang memasukkan pernyataan SQL yang berniat jahat ke dalam $username, keseluruhan pernyataan pertanyaan akan ditukar. Sebagai contoh, jika nama pengguna yang diserahkan oleh penyerang ialah:
admin';-- -
, maka pernyataan pertanyaan yang sebenarnya dilaksanakan akan menjadi:
SELECT * FROM users WHERE username='admin';-- -' AND password='$password'
dan "--" ialah watak komen bagi pernyataan SQL , yang Ini bermakna segala-galanya selepas aksara ulasan telah dipadamkan, jadi $password tidak lagi memainkan peranan dalam mengesahkan kata laluan. Penyerang berkemungkinan memperoleh keseluruhan senarai pengguna dengan cara ini atau secara langsung mengubah data dalam pangkalan data.
2. Elakkan serangan suntikan SQL
Untuk mengelakkan serangan suntikan SQL, kita perlu memberi perhatian kepada perkara berikut:
Walaupun kaedah pertanyaan sebelumnya sangat mudah, ia terdedah kepada serangan suntikan SQL. Masalah ini boleh dielakkan dengan menggunakan pertanyaan berparameter. Pertanyaan berparameter tidak menyambung secara langsung parameter pertanyaan dan pernyataan pertanyaan sebaliknya, mereka menggunakan ruang letak dalam pertanyaan dan menghantar semua parameter secara berasingan.
Sebagai contoh, contoh di atas boleh ditulis seperti ini:
$username = $_POST['username']; $password = $_POST['password']; $stmt = $db->prepare("SELECT * FROM users WHERE username=? AND password=?"); $stmt->bind_param("ss", $username, $password); $stmt->execute(); $result = $stmt->get_result();
Di sini kami menghantar nama pengguna dan kata laluan kepada pertanyaan secara berasingan, menggunakan ? Dengan cara ini, walaupun penyerang memasukkan pernyataan SQL yang berniat jahat ke dalam nama pengguna, ia tidak boleh dilaksanakan.
Dalam aplikasi, kami juga boleh menapis input pengguna. Sebagai contoh, kita boleh menggunakan fungsi terbina dalam PHP addslashes() untuk melepaskan input pengguna. Ini memastikan bahawa input pengguna tidak ditafsirkan sebagai pernyataan SQL.
Sebagai contoh, kod berikut menunjukkan menggunakan fungsi addslashes() untuk melarikan diri dari $name yang diserahkan pengguna:
$name = addslashes($_POST['name']); $sql = "SELECT * FROM users WHERE name='$name'";
Pernyataan SQL Dinamik merujuk kepada membina pernyataan SQL pada masa jalan untuk melaksanakan pertanyaan SQL. Pernyataan SQL dinamik terdedah kepada serangan suntikan SQL. Oleh itu, jangan gunakan pernyataan SQL dinamik semasa pembangunan, tetapi gunakan pernyataan SQL tetap seperti prosedur tersimpan atau prapemprosesan.
Apabila mengkonfigurasi pangkalan data, kebenaran pengguna pangkalan data hendaklah dihadkan sebanyak mungkin. Jangan tetapkan semua pengguna untuk mempunyai akses penuh, tetapi hanya benarkan kebenaran yang diperlukan. Dengan cara ini, walaupun penyerang berjaya menyuntik pernyataan SQL yang berniat jahat, adalah sukar untuk mendapatkan maklumat sensitif atau menukar data.
Tembok api boleh mengesan dan menyekat serangan suntikan SQL. Firewall secara berkesan boleh menyekat semua percubaan pencerobohan terhadap aplikasi web dengan menghantar trafik data kepada satu set peraturan yang memeriksa trafik. Oleh itu, menggunakan tembok api boleh meningkatkan keselamatan semasa membangunkan aplikasi web.
3. Ringkasan
Serangan suntikan SQL adalah masalah yang tidak dapat dielakkan dalam pembangunan aplikasi web. Dalam pembangunan aplikasi PHP, kita perlu memberi perhatian untuk mengelakkan serangan suntikan SQL. Dengan menggunakan pertanyaan berparameter, menapis input pengguna, tidak menggunakan pernyataan SQL dinamik, dan mengkonfigurasi kebenaran pengguna pangkalan data dengan betul dan menggunakan tembok api, kami boleh meningkatkan keselamatan aplikasi web dengan berkesan.
Atas ialah kandungan terperinci Perlindungan keselamatan PHP: elakkan pendedahan ralat SQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!