Rumah > Artikel > pembangunan bahagian belakang > Antara muka API PHP: Cara menangani serangan suntikan SQL
Sebagai bahasa back-end yang popular, PHP sering digunakan untuk membangunkan aplikasi web atau API, memberikan banyak kemudahan dan fleksibiliti kepada pembangun. Walau bagaimanapun, untuk sebarang jenis aplikasi web atau API, terdapat risiko keselamatan yang sama: serangan suntikan SQL. Artikel ini akan membawa pembaca memahami apa itu serangan suntikan SQL dan cara mencegah serta bertindak balas terhadap jenis serangan ini dengan menulis kod PHP.
Apakah itu SQL Injection Attack
SQL injection attack ialah apabila penyerang memasukkan kod hasad ke dalam pertanyaan pangkalan data aplikasi web atau API. Kod hasad ini boleh menyebabkan kerosakan atau kebocoran kepada pangkalan data dan maklumat berkaitannya, seperti memadam, mengubah suai dan melihat data dalam pangkalan data.
Penyerang yang menggunakan serangan suntikan SQL biasanya berbuat demikian dengan meneka pernyataan pertanyaan SQL dalam aplikasi atau API. Penyerang mengeksploitasi kelemahan dalam aplikasi atau API dengan menghantar kod hasad yang direka khas (seperti rentetan pertanyaan SQL) ke aplikasi atau API, dengan itu memasukkan kod hasad ke dalam pertanyaan pangkalan data. Kod berniat jahat ini entah bagaimana boleh mencuri, mengusik atau memadam data daripada pangkalan data.
Serangan suntikan SQL amat berbahaya apabila berurusan dengan input pengguna. Sesetengah pembangun boleh menyambung input pengguna terus ke dalam pertanyaan SQL, yang memudahkan serangan suntikan SQL.
Amalan Terbaik untuk Menangani Serangan SQL Injection
Disenaraikan di bawah adalah beberapa amalan terbaik untuk menangani Serangan SQL Injection:
Apabila membangunkan aplikasi atau API pertanyaan splicing secara terus sangat penting. Sebaliknya, anda harus menggunakan pernyataan pertanyaan berparameter untuk membina pertanyaan. Pertanyaan berparameter membenarkan pembangun menentukan parameter untuk digunakan dalam pertanyaan, dan bukannya menyambung secara langsung input pengguna ke dalam pertanyaan.
Menggunakan pertanyaan berparameter boleh menghalang serangan suntikan SQL dan meningkatkan prestasi pertanyaan dengan berkesan.
Berikut ialah contoh pertanyaan berparameter menggunakan PDO:
$pdo = new PDO('mysql:host=localhost;dbname=mydb', 'username', 'password'); $stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username'); $stmt->execute([ 'username' => $_POST['username'] ]); $result = $stmt->fetchAll();
Apabila berurusan dengan data pengguna, ia juga sangat penting untuk menapis input pengguna. Menapis input pengguna memastikan bahawa hanya input yang disahkan mencapai pertanyaan pangkalan data. Berikut ialah beberapa cara untuk menapis input pengguna:
Begini cara menapis dalam PHP penapis Contoh input pengguna:
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
Memaparkan mesej ralat terperinci harus dielakkan di mana mungkin dalam persekitaran pengeluaran. Jika ralat berlaku, mesej ralat yang berguna harus diberikan kepada pengguna, tetapi maklumat ralat terperinci tidak boleh didedahkan pada antara muka web, kerana penyerang boleh menggunakan maklumat ini untuk melakukan serangan yang disasarkan.
Berikut ialah contoh melumpuhkan mesej ralat terperinci dalam PHP:
error_reporting(0); ini_set('display_errors', 0);
Ia juga sangat penting untuk menyulitkan kata laluan pangkalan data. Jika kata laluan pangkalan data tidak disulitkan, penyerang boleh mendapatkan kata laluan dan mengakses pangkalan data dengan mudah.
Berikut ialah contoh menggunakan kata laluan yang dicincang untuk menyulitkan kata laluan pangkalan data:
$password = 'mypassword'; $hashed_password = password_hash($password, PASSWORD_DEFAULT);
Menyandarkan pangkalan data dengan kerap juga merupakan langkah penting untuk menangani serangan suntikan SQL. Sekiranya berlaku serangan, anda boleh menggunakan fail sandaran untuk memulihkan pangkalan data yang terjejas.
Kesimpulan
Serangan suntikan SQL ialah ancaman biasa kepada semua aplikasi web dan API. Dengan mengikuti amalan terbaik di atas, pembangun boleh menghalang dan bertindak balas terhadap serangan suntikan SQL terus dari peringkat kod. Ini bukan sahaja akan menjadikan aplikasi anda lebih selamat, tetapi ia juga akan menjadikan pengguna anda lebih mempercayai aplikasi anda.
Atas ialah kandungan terperinci Antara muka API PHP: Cara menangani serangan suntikan SQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!