Daha fazla araştırmadan şunu buldum:
http://dev.mysql.com/doc/refman/5.1/en/news-5-1-11.html
Güvenlik Düzeltmesi:
Çok baytlı kodlama işlemede bir SQL enjeksiyon güvenlik açığı bulundu. Hata sunucudaydı, mysql_real_escape_string () C API işleviyle kaçan dizeyi yanlış bir şekilde ayrıştırıyordu.
Bu güvenlik açığı, OSDB konsorsiyumunun projeler arası güvenlik işbirliğinin bir parçası olarak Josh Berkus ve Tom Lane tarafından keşfedildi ve bildirildi. SQL yerleştirme hakkında daha fazla bilgi için lütfen aşağıdaki metne bakın.
Tartışma. Çok baytlı kodlama işlemede bir SQL enjeksiyon güvenlik açığı bulundu. Bir SQL enjeksiyon güvenlik açığı, bir kullanıcı veri tabanına eklenmek üzere veri sağladığında, kullanıcının sunucunun yürüteceği verilere SQL ifadeleri enjekte edebildiği bir durumu içerebilir. Bu güvenlik açığıyla ilgili olarak, karakter kümesi farkında olmadan kaçış kullanıldığında (örneğin, PHP'de addslashes ()), bazı çok baytlı karakter kümelerinde (örneğin, SJIS, BIG5 ve GBK) kaçmayı atlamak mümkündür. Sonuç olarak, addslashes () gibi bir işlev, SQL enjeksiyon saldırılarını önleyemez. Bunu sunucu tarafında düzeltmek imkansız. En iyi çözüm, uygulamaların mysql_real_escape_string () gibi bir işlev tarafından sunulan karakter kümesine duyarlı kaçmayı kullanmasıdır.
Ancak, MySQL sunucusunun mysql_real_escape_string () çıktısını nasıl ayrıştırdığına ilişkin bir hata tespit edildi. Sonuç olarak, karakter kümesine duyarlı işlev mysql_real_escape_string () kullanıldığında bile SQL enjeksiyonu mümkün olmuştur. Bu hata düzeltildi.
Çözümler. MySQL'i mysql_real_escape_string () ayrıştırmada hata için düzeltmeyi içeren bir sürüme yükseltemiyorsanız, ancak MySQL 5.0.1 veya üstünü çalıştırıyorsanız, geçici çözüm olarak NO_BACKSLASH_ESCAPES SQL modunu kullanabilirsiniz. (Bu mod MySQL 5.0.1'de sunulmuştur.) NO_BACKSLASH_ESCAPES, ters eğik çizginin özel bir karakter olarak görülmediği bir SQL standart uyumluluk modunu etkinleştirir. Sonuç, sorguların başarısız olacağı olacaktır.
Mevcut bağlantı için bu modu ayarlamak için aşağıdaki SQL ifadesini girin:
SET sql_mode='NO_BACKSLASH_ESCAPES';
Modu tüm istemciler için global olarak da ayarlayabilirsiniz:
SET GLOBAL sql_mode='NO_BACKSLASH_ESCAPES';
Bu SQL modu, sunucu başlatıldığında da otomatik olarak etkinleştirilebilir --sql-mode = NO_BACKSLASH_ESCAPES veya sunucu seçeneği dosyasında sql-mode = NO_BACKSLASH_ESCAPES (örneğin, my.cnf veya my.ini) sisteminize bağlı olarak). (Hata # 8378, CVE-2006-2753)
Ayrıca Hata # 8303'e bakın.