Rumah >pangkalan data >tutorial mysql >Mengapa mysql_real_escape_string Tidak Mencukupi untuk Mencegah Suntikan SQL?
Kekurangan mysql_real_escape_string: Penggunaan Salah dan Skop Terhad
Fungsi mysql_real_escape_string telah dikritik kerana menawarkan perlindungan suntikan SQL yang tidak lengkap terhadap serangan suntikan SQL. Walaupun ia secara berkesan melepaskan rentetan yang dimaksudkan untuk digunakan dalam petikan pernyataan SQL, aplikasi yang betul adalah penting.
Satu kelemahan utama ialah pengendalian nilai berangka yang salah. Jika mysql_real_escape_string digunakan pada nilai berangka, ia akan mengekalkan sifat berangkanya dan kekal terdedah kepada serangan suntikan. Contohnya:
mysql_query('DELETE FROM users WHERE user_id = '.mysql_real_escape_string($input));
Dengan input "5 OR 1=1," serangan suntikan berjaya kerana mysql_real_escape_string tidak menukar input kepada rentetan.
Satu lagi kelemahan ialah skop terhad daripada mysql_real_escape_string. Ia bertujuan semata-mata untuk melepaskan rentetan dalam petikan pernyataan SQL. Jika digunakan dalam konteks lain, seperti penugasan pembolehubah atau gabungan, ia mungkin secara tidak sengaja memperkenalkan kelemahan.
Pengekodan sambungan pangkalan data yang salah juga menimbulkan risiko. Menggunakan perintah mysql_query("SET NAMES 'utf8'") untuk menetapkan pengekodan memintas mysql_ API, yang berpotensi membawa kepada tafsiran rentetan yang tidak sepadan antara klien dan pangkalan data. Ini boleh memudahkan serangan suntikan SQL yang melibatkan rentetan berbilangbait.
Adalah penting untuk ambil perhatian bahawa mysql_real_escape_string tidak mempunyai kelemahan suntikan asas apabila digunakan dengan betul. Walau bagaimanapun, skopnya yang sempit dan mudah terdedah kepada aplikasi yang salah menjadikannya pilihan yang kurang boleh dipercayai untuk pembangunan perisian moden. Penyataan atau mekanisme pengikatan parameter yang disediakan bersama-sama dengan antara muka bahasa selamat menawarkan perlindungan yang lebih teguh terhadap serangan suntikan SQL.
Atas ialah kandungan terperinci Mengapa mysql_real_escape_string Tidak Mencukupi untuk Mencegah Suntikan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!