Bolehkah mysql_real_escape_string Melindungi Terhadap SQL Injection?
Walaupun penggunaan mysql_real_escape_string secara meluas, kebimbangan telah dibangkitkan mengenai keberkesanannya dalam mencegah serangan suntikan SQL . Walaupun ia menawarkan perlindungan dalam kebanyakan kes, ia mempunyai had tertentu dan penggunaan yang salah boleh menyebabkannya kurang selamat.
Kekurangan mysql_real_escape_string
Salah satu kelemahan utama mysql_real_escape_string terletak pada tujuan penggunaannya. Ia direka bentuk untuk melepaskan nilai rentetan yang dimaksudkan untuk digunakan dalam rentetan yang dipetik dalam pernyataan SQL. Jika digunakan pada nilai yang digunakan dalam konteks lain, contohnya, menggabungkan pertanyaan, ia mungkin tidak memberikan perlindungan lengkap.
Sebagai contoh, penggunaan mysql_real_escape_string yang salah dalam pertanyaan berikut mendedahkannya kepada suntikan SQL:
mysql_query('DELETE FROM users WHERE user_id = '.mysql_real_escape_string($input));
Ini kerana input boleh mengandungi aksara bukan angka, seperti "5 ATAU 1=1," yang akan benarkan penyerang memintas pertanyaan yang dimaksudkan.
Isu lain timbul apabila pengekodan sambungan pangkalan data ditetapkan dengan tidak betul. Menetapkan pengekodan aksara melalui "SET NAMES" dan bukannya "mysql_set_charset" pilihan boleh mencipta percanggahan antara cara API klien mysql_ merawat rentetan dan cara pangkalan data mentafsirnya. Ini boleh membawa kepada serangan suntikan rentetan berbilangbait.
Penggunaan Betul
Untuk memastikan keberkesanan mysql_real_escape_string, adalah penting untuk menerapkannya dengan betul. Ia hanya boleh digunakan untuk melepaskan nilai rentetan yang disertakan dalam petikan dalam pernyataan SQL. Sebarang penggunaan lain boleh mengakibatkan kesilapan melarikan diri atau mewujudkan kelemahan.
Pendekatan Alternatif
Walaupun mysql_real_escape_string boleh memberikan perlindungan terhadap suntikan SQL, secara amnya disyorkan untuk menggunakan alternatif yang lebih mantap . Penyata yang disediakan, contohnya, menawarkan tahap keselamatan yang lebih tinggi dengan mengendalikan pelarian dan parameterisasi secara automatik, menghapuskan potensi suntikan.
Kesimpulan
Sementara mysql_real_escape_string boleh mengurangkan suntikan SQL jika digunakan dengan betul, kes penggunaannya yang sempit dan potensi salah guna mengehadkan keberkesanannya. Pembangun harus mempertimbangkan untuk menggunakan alternatif moden, seperti pernyataan yang disediakan, untuk perlindungan yang boleh dipercayai terhadap serangan suntikan.
Atas ialah kandungan terperinci Adakah mysql_real_escape_string Benar-benar Melindungi Terhadap SQL Injection?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!