Этот вопрос является продолжением к другому я спросил HereКак передать столбцы в качестве параметров в динамическом SQL - C#, SQL Server Compact
У меня есть форма выигрыша, которая имеет галочки в нем. Имена флажков соответствуют именам столбцов таблицы. Я не могу нормализовать таблицы из-за огромных данных, которые уже получены для живого проекта. так что все остается как есть. Я получаю выбранные имена checbox как csv col1, col2, col3, которые позже я объединяю их с строкой sql. (Без SPs, как его sql compact 3.5 sdf dbase). В моем методе GetData() класса DataAccess я формирую строку sql. Но чтобы избежать инъекций sql, можно гарантировать, что прошедшие проверки имена столбцов будут проверены.
// Get Data
// selectedMPs: string csv, generated from the list of selected posts(checkboxes) from the UI, forming the col names in select
public static DataTable GetDataPostsCars(string selectedMPs, DateTime fromDateTime, DateTime toDateTime)
{
DataTable dt;
//string[] cols = selectedMPs.Split(','); //converts to array
//object[] cols2 = cols;//gets as object array
//=== using cols or cols 2 in String.Format does not help
// this WORKS, but as i am aware its prone to injections. so how can i validate the "selectedMPs" that those are columns from a list or dictionary or so on? i am not experienced with that.
string sql = string.Format(
"SELECT " + selectedMPs + " " +
"FROM GdRateFixedPosts " +
"WHERE MonitorDateTime BETWEEN '" + fromDateTime + "' AND '" + toDateTime +
using (cmd = new SqlCeCommand(sql,conn))
{
cmd.CommandType = CommandType.Text; //cmd.Parameters.Add("@toDateTime",DbType.DateTime);
dt = ExecuteSelectCommand(cmd);
}
return dt;
}
это работает, но, как я знаю его склонным к инъекциям. так как я могу проверить «selectedMPs», что это столбцы из списка или словаря или так далее? Я не испытываю этого. Я бы очень признателен вам за вашу помощь. Заранее спасибо.
Любое, пожалуйста? – Nish