İşte konuyla ilgili üst düzey görünümüm. Dinamik SQL dizeleri kullanırken
, doğru çalışma kaçan fonksiyonu güveniyorlar. Veri değerleri kaçtı edildikten sonra
http://dev.mysql.com/doc/refman/5.0/en/news-5-0-22.html
SQL dizesi ayrıştırılır ve veritabanı tarafından derlenen edilecek etti: Bu (kuşkusuz eski) örneğinde görülebileceği gibi Ne yazık ki bu durum, her zaman değil sunucusu. Eğer kaçan işlev düzgün şekilde işini yapmamışsa veya akıllı bir yeni SQL enjeksiyon saldırısı tespit edilmişse, sunucunun SQL ifadeleri için veriyi hata yapması ihtimali vardır.
Parametrelerle hazırlanmış ifadeler kullanırsanız, ifade ilk olarak ayrıştırılır ve derlenir. Veri değerleri, yürütüldüğünde derlenmiş ifade ile birleştirilir. Bu, SQL mantığını veri değerlerinden ayırır - iki 'u karıştırmama fırsatı asla oluşmaz.
Yani, evet, mysqli_real_escape_string
no'lu yayına başvurabilirsin, ancak hazırladığı ifadeleri parametrelerle kullanmanın SQL Injection'ı imkansız hale getirdiğini söyleyecek kadar ileri gitmem. mysqli_real_escape_string
hatasında olduğu gibi, bunu daha da zorlaştırır, sanırım her zaman keşfedilecek (veya yeni oluşturulan) bir hatanın mümkün olanı imkansız kılacağı ihtimali vardır.
Evet, daha fazla bilgi için bkz http://www.sjmp.de/php/php-mysql-mehr-sicherheit-und-erhoehte-performance-durch-mysqli-und-prepared-statements/ – Tobias