Adakah Pengekodan Mempengaruhi Keberkesanan mysql_real_escape_string() Terhadap SQL Injection?
Kerentanan yang didakwa mendakwa bahawa mysql(real_escape)_escape boleh menyamai fungsi mysql(real_escape) menggunakan pengekodan aksara Asia tertentu, seperti BIG5 atau GBK. Ini menimbulkan kebimbangan tentang keberkesanan fungsi ini sebagai pertahanan menyeluruh terhadap serangan suntikan SQL.
Kesan Pengekodan terhadap Keselamatan
Seperti kenyataan pakar keselamatan Stefan Esser , mysql_real_escape_string() dikompromi apabila digunakan bersama dengan arahan SET NAMES. Ini kerana SET NAMES membenarkan perubahan pengekodan dinamik, yang memintas pengesanan dan keupayaan melarikan diri mysql_real_escape_string(). Apabila pengekodan peralihan kepada format berbilang bait yang membenarkan aksara garisan belakang sebagai bait bukan permulaan, mysql_real_escape_string() gagal melarikan diri dengan betul, mendedahkan kelemahan kepada serangan suntikan.
Implikasi untuk Perlindungan Laman Web
Jika aplikasi bergantung semata-mata pada mysql_real_escape_string() untuk perlindungan suntikan SQL dan ia menggunakan SET NAMES untuk menukar pengekodan, tapak web kekal terdedah kepada serangan.
Strategi Mitigasi
Untuk mengurangkan kelemahan ini, adalah penting untuk mengelak daripada menggunakan SET NAMES bersama-sama dengan mysql_real_escape_string(). Sebaliknya, fungsi mysql_set_charset() yang lebih selamat harus digunakan untuk perubahan pengekodan. Walau bagaimanapun, perlu diingat bahawa pilihan ini hanya tersedia dalam versi PHP yang terkemudian.
Langkah Berjaga-jaga Tambahan
Walaupun UTF-8 dianggap selamat untuk digunakan dengan mysql_real_escape_string( ), adalah amalan yang baik untuk melaksanakan langkah keselamatan tambahan, seperti menggunakan pernyataan yang disediakan atau teknik pengesahan input, untuk meningkatkan lagi perlindungan terhadap serangan suntikan SQL.
Atas ialah kandungan terperinci Berikut ialah beberapa tajuk berasaskan soalan yang sesuai dengan kandungan artikel: * Bolehkah Pengekodan menjejaskan Keberkesanan mysql_real_escape_string() untuk Perlindungan Suntikan SQL? * Adakah mysql_real_escape_s. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!