В интересах экономии времени я написал модуль SQL, который позволяет мне писать вещи в сокращенном виде, а не инициализировать объект SqlCommand
каждый раз, когда я хочу запускать запросы внутри модуля.Использование службы WCF для обработки SQL-запросов
Теперь я пытаюсь перенести этот модуль на службу WCF по соображениям безопасности (предотвращая доступ приложения Winforms к непосредственному доступу к базе данных).
Следующая функция используется для запросов к базе данных и возвращает DataTable
результатов
public DataTable FillTable(string sql)
{
query = new SqlCommand();
query.Connection = conn;
query.CommandText = sql;
DataTable dt = new DataTable();
try
{
conn.Open();
dt.Load(query.ExecuteReader());
conn.Close();
}
catch (Exception ex)
{
conn.Close();
Console.Write("fillTable: " + ex.Message);
}
return dt;
}
Учитывая, что это буквально только принимает строку в качестве входных данных, можно предположить, что это является открытым для потенциальных атак инъекций - несмотря на он не запускается непосредственно в базе данных? Если потенциальный злоумышленник знает только местоположение службы (на основе ссылки на службу в приложении), можно ли легко заменить отправленную строку и извлечь несанкционированные данные?
База данных, с которой я работаю, является небольшой, но я хочу убедиться, что я правильно защищаю.
Естественно, я знаю, что могу написать индивидуальную функцию для каждого экземпляра, но с почти 100 видами использования в рамках проекта до сих пор для этой функции в одиночку, это было бы не только болью, но и обслуживание в будущем была бы настоящей головной болью
Нечего сказать. Да, ваш код очень уязвим для любого типа инъекций – Steve
, вы можете использовать это как частный метод и использовать его. вам не нужно раскрывать это как общедоступную веб-службу. в любом случае каждый метод api должен иметь проверку подлинности/авторизации. тот, кто хочет использовать этот метод обслуживания, должен это сделать. – Aravind
Любая конкретная причина, по которой вы по-прежнему используете простой SQL вместо переключения на сущность Framework и linq, которые по дизайну не могут быть затронуты SQL-инъекцией? –