Я использую 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 в качестве базы данных.
Поскольку использование SqlParameter не является вариантом, просто замените ' на '' (это две одинарные кавычки, а не одна двойная) в строковых литералах. Вот и все.
Для потенциальных даунвоттеров: перечитайте первую строку вопроса. "Использовать параметры" - это тоже была моя интуитивная реакция.
EDIT: да, я знаю об атаках SQL-инъекций. Если вы считаете, что эта цитата уязвима для них, пожалуйста, приведите работающий контрпример. Я думаю, что это не так.
Просто:
const string sql = "SELECT * FROM SOME_TABLE WHERE Name = @name";
и добавьте параметр @name
со значением:
cmd.CommandText = sql;
cmd.Parameters.AddWithValue("@name", name);