Передайте динамические c имя таблицы и имя столбца в запросе как sql параметры в ado.net - PullRequest
1 голос
/ 10 февраля 2020

Цель: предотвратить внедрение SQL.

Я хочу передать имя столбца и имя таблицы динамически из запроса на выборку.

Рассмотрим следующий метод:

public bool PassColumnTableDynamic(string columnName, string tableName)
{
    string commandText = string.Format(select {0} from {1}, columnName, tableName);

    try
    {
            using (var command = new SqlCommand(commandText, _connection))
            {
               command.ExecuteScalar();
            }
    }
    catch (Exception ex)
    {
        throw new Exception("error",ex);
    }

    return true;
}

CommandText уязвим для SQL внедрения. Как я могу предотвратить это?

У меня есть решение для создания хранимой процедуры и передачи ее в качестве параметра из этого метода. Но я не хочу создавать хранимую процедуру.

Есть ли в коде C# что-нибудь, что можно исправить?

1 Ответ

0 голосов
/ 10 февраля 2020

если пользователь не может ввести эти имена напрямую, просто введите их, как вы ...

в противном случае прямого пути нет, рассмотрите возможность использования Regex, например "^[a-zA-Z]*$", чтобы пользователь мог вставлять только текст

...