Asp.Net Te Sql Parametresine Değer Yollama Sorunu??
-
Saolun cevaplar için....
-
CEO bunu yazdıHannibal_King bunu yazdı
dediğin gibi yaptım oldu hocam peki bu yöntem güvenlik açısından sıkıntılı olur mu bazı yerlerde parametreli kullanın demişlerde hep
Hocam parametre olarak vermekle direkt olarak böyle yazmak arasında bir fark olduğunu sanmıyorum.
Sonuçta birini direkt olarak veriyorsun, diğerini parametre olarak(aslında bu da direkt olarak) veriyorsun.
He eğer güvenlik çok önemliyse management studio ile sql fonksiyonu yazıp o fonksiyona parametre olarak verirsin, böylece yazdığın kodun güvenliğinden emin olabilirsin..
+ query +
şeklinde yaptığın sorgular sql injectiona açık sorgulardır. queryini bir temizleme fonksiyonundan geçirmeli veya parametre olarak kullanmalısın.
-
@FCN hocam çözümü de söylermisin nasıl yapayım ? sorguya convert, cast gibi bıseyler mı eklemem lazım neden hata veriyor?
-
Cevabı vermiş zaten
Conversion failed when converting the varchar value ‘1,2,0’ to data type int."
SQL deki grup'un tipi int sen string göndermeye çalışıyorsun
Onun yerine kelimeyi int array'e çevirip com.AddArrayParameters("deneme",array) olarak çalışması lazım
var groups = kelime.Split(',').Select(i=>int.Parse(i)).ToArray();
com.AddArrayParameters("deneme",groups);
gibi
SinusX tarafından 21/Eki/14 19:13 tarihinde düzenlenmiştir -
SinusX bunu yazdı
Cevabı vermiş zaten
Conversion failed when converting the varchar value ‘1,2,0’ to data type int."
SQL deki grup'un tipi int sen string göndermeye çalışıyorsun
Onun yerine kelimeyi int array'e çevirip com.AddArrayParameters("deneme",array) olarak çalışması lazım
var groups = kelime.Split(',').Select(i=>int.Parse(i)).ToArray();
com.AddArrayParameters("deneme",groups);
gibi
Tamam cevabı vermiş ama sentaks bilgim tam olmadığı için kod kısmında ne yazacağımı bilemedim.O string değişkeni nasıl diziye çevirip argüman olarak vericem onu yapamadım.Sen burda sentaks ı uydurmaca yazdın dimi hocam ? addarrayparameters bende çıkmadı ama??
-
Hannibal_King bunu yazdıSinusX bunu yazdı
Cevabı vermiş zaten
Conversion failed when converting the varchar value ‘1,2,0’ to data type int."
SQL deki grup'un tipi int sen string göndermeye çalışıyorsun
Onun yerine kelimeyi int array'e çevirip com.AddArrayParameters("deneme",array) olarak çalışması lazım
var groups = kelime.Split(',').Select(i=>int.Parse(i)).ToArray();
com.AddArrayParameters("deneme",groups);
gibi
Tamam cevabı vermiş ama sentaks bilgim tam olmadığı için kod kısmında ne yazacağımı bilemedim.O string değişkeni nasıl diziye çevirip argüman olarak vericem onu yapamadım.Sen burda sentaks ı uydurmaca yazdın dimi hocam ? addarrayparameters bende çıkmadı ama??
ben function kullanıyorum gelen string'i sql table 'a çeviriyor bu sayede parametre kullanabilirsin injection'ı engellersin
http://stackoverflow.com/questions/5257427/sql-server-string-to-table-function
burayı okuyabilirsin yapamazsan haber et akşama bakalım hacı
-
Şu linkte sanırım tam olarak senin sorunun çözümü var hocam. Bi bak istersen.
http://stackoverflow.com/a/2377651/2877080
MadJack tarafından 22/Eki/14 16:45 tarihinde düzenlenmiştir -
edit: anlamamışım
acemi-webci tarafından 22/Eki/14 17:11 tarihinde düzenlenmiştir -
@mfe25 ve @Sharp hocam şimdi inceliyicem ingilizcemde çok kötü yapamazsam pm atarım size
-
Hannibal_King bunu yazdı
public List sorulari_cek(string kelime) { List soru_listesi = new List(); string mycommand = "select * from sorular where grup in (@deneme) order by NewID()"; SqlCommand com = new SqlCommand(mycommand, con); com.Parameters.AddWithValue("@deneme",kelime); con.Open(); SqlDataReader rd = com.ExecuteReader(); while (rd.Read()) { sorular nesne = new sorular(); nesne.soru_ID =Convert.ToInt32(rd["soru_ID"]); nesne.soru = rd["soru"].ToString(); nesne.cevap = rd["cevap"].ToString(); nesne.grup = Convert.ToInt32(rd["grup"]); soru_listesi.Add(nesne); } con.Close(); return soru_listesi; }Kod tarafından kelime isimli string değişkenimi 2,15,6,0 şeklinde direk yolluyorum class taki fonksiyona 2. 15. 6. ve 0. gruba ait soruları getırsın diye ama runtime da
Conversion failed when converting the varchar value ‘1,2,0’ to data type int."
gibisinden hata veriyo 1,2,0 kısmı yerine kelime yazıyo bazen hatada biraz baktım cast ve convert fonksıyonu kullan demısler
beceremedım onuda 1-2 denedım olmadı. sql de İN operatorune nasıl değişken sayıda parametre yollayabilirim.??
1,2,0 olarak verdiğin kelime stringi aslında 1 değil 3 parametre barındırıyor. O nedenle aslında 3 farklı parametre olarak gönderilmesi gerekiyor. Ama sen kodunda bunu tek parametre üzerinden geçirmeye çalışıyorsun, int istediği değeri string olarak gönderiyorsun, bu da yanlış olduğundan hataya düşüyorsun.
Parametre kullanmayıp direk string olarak verdiğinde de problem bu nedenle ortadan kalkıyor.
Burada çözümün bu şekilde ilerlemek olacak ise (yorumlara baktığımda farklı öneriler olduğundan diyorum) önerim burada gelen değişken sayına göre dinamik olarak sql command oluşturacak bir yapı kurman olacaktır.
Yani query'i gelen kelime öğesine göre kendin server side'da oluşturabilirsin. kelime değişkenin ile gelen datalar nereden geliyor bilmiyorum ama işin içine güvenlik girdiğinden manipule edilebilecek bir yerden geliyorsa her türlü açık verirsin. Bu değerler dropdownlist, radiobuttonlist'den geliyorsa sayfa içeriğini htmlden düzenleyerek, querystring den geliyorsa urlden düzenleyerek manipule etmeye açık olacaktır.
O nedenle query de parametre ile ilerlemeni öneririm. Dinamik query oluşturmak için birkaç örneğim olsa gerek. İhtiyacın olur ise mesaj atarsan yardımcı olmaya çalışırım.
CuCo tarafından 31/Eki/14 10:06 tarihinde düzenlenmiştir
