parametreli sorgu *
-
bir sql sorgusuna (daha dogrusu $ablonuna) disaridan gelecek parametreleri en son bindirmeye deniyor. sql injection gibi naneleri engellemek icin birebir.
mesela java'dayiz
conn.preparestatement("select * from users where username = ? and password = ?", username, password);
diyorsunuz, o guvenlice her seyi escape falan edip koyuyor oraya. -
tek amacı güvenlik olmayan nane, tabloya milyon tane kayıt girilecekse hız kazanmak için de kullanılır. kabaca : sunucu ilk olarak sorguyu alır, ne yapacağını analiz eder, ardından siz parametreleri gönderirsiniz ve sunucu işlemi yapmaya başlar. girilen her kayıtda ilgili sqli alıp içine parametreleri escape ederek sorguyu yeniden çalıştırmaz yani.
-
(bkz: parameterized query)
(bkz: preparedstatement)
implementasyonu aşağıdakine benzer bir şekilde yapıldıysa hiçbir işe yaramaz:
string query = "select * from user_hede where user_id = ? or (name = ? and surname = ?)";
string[] parameters = new string[]{"123", "murtaza","lastname or 1=1"};
for(int i=0;i<parameters.length;i++)
{
int index = query.indexof("?");
if(index>-1)
query = query.substring(0, index)+parameters[i]+query.substring(index + 1);
else
throw new runtimeexception("fazla parametre var burda aloooo");
}
output:
select * from user_hede where user_id = 123 or (name = murtaza and surname = lastname or 1=1)
(bkz: sql injection)
(bkz: escape character)
(bkz: magic quotes)
ekşi sözlük kullanıcılarıyla mesajlaşmak ve yazdıkları entry'leri
takip etmek için giriş yapmalısın.
hesabın var mı? giriş yap