Dan daha fazla araştırma, buldum:
http://dev.mysql.com/doc / refman/5.1/en/news-5-1-11.html
Security Fix:
Bir SQL injection güvenlik delik çok bayt kodlama işleme bulunmuştur. Hata yanlış mysql_real_escape_string () C API işlevi ile kaçtı dize ayrıştırma, sunucu oldu.
Bu güvenlik açığı keşfetti ve Josh BERKUS'ın tarafından bildirilmiştir josh@postgresql.org ve Tom Lane tgl@sss.pgh.pa.us OSDB konsorsiyum arası proje güvenlik işbirliğinin bir parçası olarak. SQL enjeksiyon hakkında daha fazla bilgi için, aşağıdaki metni bakın.
Tartışma. Bir SQL enjeksiyon güvenlik delik çok bayt kodlama işleme bulunmuştur. Bir SQL injection güvenlik açığı, bir kullanıcı veritabanına eklenecek verileri temin edildiğinde, kullanıcı sunucu yürütecek veri içine SQL ifadeleri enjekte olabilir sayede bir durum içerebilir. Karakter kümesi-habersiz öncelemeli (PHP örneğin, addslashes ()) kullanılan bu güvenlik açığı, getirmedi, bu (örneğin, SJIS, bıg5 ve GBK) bazı multi-byte karakter setleri kaçan atlamak mümkündür. Sonuç olarak, bu tür addslashes () gibi bir işlev SQL enjeksiyon saldırıları önlemek mümkün değildir. Bu sunucu tarafında bu düzeltmek mümkün değildir. Uygulamalar bir işlev gibi mysql_real_escape_string () tarafından sunulan öncelenimin karakter kümesi-farkında kullanmak için en iyi çözümdür.
Ancak, bir hata MySQL sunucusu mysql_real_escape_string çıkışını () ayrıştırmak nasıl tespit edildi. Sonuç olarak, karakter kümesi-farkında fonksiyonu mysql_real_escape_string () kullanıldığı zaman bile, SQL enjeksiyon mümkün oldu. Bu hata düzeltildi.
Geçici. Eğer mysql_real_escape_string de hata () ayrıştırma için düzeltmeyi içeren bir sürümüne MySQL yükseltmek için veremiyoruz, fakat MySQL 5.0.1 veya daha yüksek çalıştırırsanız, geçici bir çözüm olarak NO_BACKSLASH_ESCAPES SQL modunu kullanabilirsiniz. (Bu mod MySQL 5.0.1 tanıtıldı.) NO_BACKSLASH_ESCAPES ters eğik bir özel karakter kabul edilmez bir SQL standart uyumluluk modu, sağlar. Sonuç sorgular başarısız olacağını olacaktır.
Geçerli bağlantı için bu modu ayarlamak için, aşağıdaki SQL deyimini girin:
SET sql_mode = 'NO_BACKSLASH_ESCAPES';
Ayrıca, tüm müşterileri için küresel modunu ayarlayabilirsiniz:
SET GLOBAL sql_mode = 'NO_BACKSLASH_ESCAPES';
Sql-mode = NO_BACKSLASH_ESCAPES veya sunucu seçeneği dosyasında sql-mode = NO_BACKSLASH_ESCAPES (örneğin, my.cnf veya my.ini ayarlayarak - sunucu komut satırı seçeneğini kullanarak başladığında bu SQL mod da otomatik olarak etkin olabilir ,) sizin sisteminize bağlı. (Bug # 8378, CVE-2006-2753)
Ayrıca Hata # 8303 Bkz.