yöntemini kullanarak geçirme Parametrelerle kayıt eklemek için bir yöntem oluşturdum, ancak bunu yaparken SQL enjeksiyonundan güvenlik engelliyorsam% 100 emin değilim?sql enjeksiyonu
Sorguyu ayırır ve bu şekilde yeniden takarsak, sql enjekte edilebilir mi? Bu yöntemi
string InsertWithParameters(string tbl, string col, string val)
{
string cnString = "connectionstring";
string sqlParameters = col.Replace(",", ",@");
sqlParameters = "@" + sqlParameters; //add the first @
List<string> columns = col.Split(',').ToList<string>();
List<string> values = val.Split(',').ToList<string>();
List<string> paramenters = sqlParameters.Split(',').ToList<string>();
string sql = "insert into " + tbl + " (" + col + ") values (" + sqlParameters + ")";
try
{
MySqlConnection cnn = new MySqlConnection(cnString);
cnn.Open();
MySqlCommand cmd = cnn.CreateCommand();
cmd.CommandText = sql;
for (int i = 0; i <= columns.Count - 1; i++)
{
cmd.Parameters.AddWithValue(paramenters[i], values[i]);
}
cmd.ExecuteNonQuery();
cnn.Close();
}
catch (Exception)
{
throw;
// TODO: Error Log
}
return ("Record Inserted");
}
SQL dizgilerini birleştiriyorsanız, yalnızca güvenliğinizi bozduğunuzu varsayın. Asla, asla, asla, asla, asla, asla, asla, asla, asla, asla, asla, asla, asla yapmayın. Bir evde değil, farede değil, bir ruhla değil. Sadece oraya gitme. –
Neden sütun ve parametrelerinizi virgülle ayrılmış bir liste olarak, dönüştürme sorunları vb. Ile birlikte geçirdiniz? Sadece sütun isimleri ve değerler için bir dizi nesne için bir dizi dizelerden geçirin. Bölme gerektirmez vb ... –
@Ed, SQL dizgilerini birleştirmek için tavsiye edilmeyebilirken, bu özel durumda şu ana kadar söyleyebileceğim şeyden, SQL dizgisi sadece sabit kodlanmış değerlerden bir araya getirilmiştir. SQL, aramadan önce kodlanmış bir dizeden kaynaklanan col parametresinden kaynaklanan dizelerle doldurulur). SQL enjeksiyonunun herhangi bir yolunu göremiyorum ... ama ;-) – Christoph