Я работаю над приложением .NET, которое необходимо выполнить SQL, параметризованные объектами базы данных, такими как таблицы или столбцы. Я бы сказал, что это симптом плохого дизайна; Тем не менее, этот дизайн - это то, что мы используем, и, к сожалению, это то, что есть. Приложение поддерживает как провайдеры Microsoft SQL Server, так и Oracle Ado.net.using (OracleCommand cmd = connection.CreateCommand())
{
cmd.CommandText = $"SELECT id, name FROM {tableName} WHERE name = :name";
cmd.Parameters.Add("name", name);
return cmd.ExecuteReader();
}
< /code>
Насколько мне известно, нет хорошего способа использовать параметры, в которых ожидается идентификатор, поэтому я считаю, что специальная проверка является моим единственным выбором, если я хочу избежать уязвимостей инъекции SQL. Цитируемые идентификаторы легко проверить - просто проверьте, что строка окружена кавычками и что внутренние кавычки должным образом избежаются. Я не так уверен в некверных идентификаторах. Моя главная проблема связана с Oracle DB, где правила идентификатора зависят от набора символов. Настройка DB был установлен. Если нет, как мне правильно проверить (некваженные) идентификаторы?
Подробнее здесь: https://stackoverflow.com/questions/797 ... validation