Как выйти из простых SQL-запросов в C# для SqlServer

Я использую API, который ожидает строку SQL. Я беру ввод данных пользователем, выхожу из него и передаю его API. Ввод данных пользователем довольно прост. Это просит значения столбцов. Как так:

string name = userInput.Value;

Затем я создаю SQL-запрос:

string sql = string.Format("SELECT * FROM SOME_TABLE WHERE Name = '{0}'",
                           name.replace("'", "''"));

Действительно ли это достаточно безопасно? Если это не, там простая библиотечная функция, которые делают значения столбцов безопасными:

string sql = string.Format("SELECT * FROM SOME_TABLE WHERE Name = '{0}'",
                           SqlSafeColumnValue(name));

API использует SQLServer в качестве базы данных.

73
задан saluce 9 October 2013 в 19:58
поделиться

2 ответа

Поскольку использование SqlParameter не является вариантом, просто замените ' на '' (это две одинарные кавычки, а не одна двойная) в строковых литералах. Вот и все.

Для потенциальных даунвоттеров: перечитайте первую строку вопроса. "Использовать параметры" - это тоже была моя интуитивная реакция.

EDIT: да, я знаю об атаках SQL-инъекций. Если вы считаете, что эта цитата уязвима для них, пожалуйста, приведите работающий контрпример. Я думаю, что это не так.

124
ответ дан 24 November 2019 в 12:22
поделиться

Просто:

const string sql = "SELECT * FROM SOME_TABLE WHERE Name = @name";

и добавьте параметр @name со значением:

cmd.CommandText = sql;
cmd.Parameters.AddWithValue("@name", name);
-4
ответ дан 24 November 2019 в 12:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: