Я изучал отчет о безопасности, созданный для приложения ASP.NET WebForms. Некоторые области нашего кода, как было отмечено, являются потенциальными уязвимостями SQL-инъекций. Я изучал эти области в нашей кодовой базе, и все они, кажется, там, где мы импортируем книги Excel. Код нарушения выглядит, когда мы пытаемся создать OleDbCommand на основе имени первого листа в книге. Мы создаем соединение с базой данных (excel sheet) с использованием объекта OleDbConnection, который считывает схему базы данных, чтобы найти имя первого листа. Затем мы динамически создаем команду SQL, используя это имя. Пример кода может выглядеть следующим образом:Уязвимости SQL Injection при импорте Excel
String connectionString = String.Format(
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};" +
"Extended Properties=\"Excel 12.0;HDR=NO;IMEX=1\"", sFullPath);
OleDbConnection conn = new OleDbConnection(connectionString);
conn.Open();
DataTable dbSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
string firstSheetName = dbSchema.Rows[0]["TABLE_NAME"].ToString();
using (OleDbCommand command = new OleDbCommand("SELECT * FROM [" + firstSheetName+ "]", conn)) // Offending line of code
В попытке устранения этого SQL Injection уязвимости Я искал в альтернативы коды выше. Кто-нибудь есть идеи, как я могу выполнить это, не будучи помеченным как уязвимость SQL Injection? Я не хочу использовать офисные объекты ActiveX для выполнения этой операции.
будет просто двигаться в этом логика в хранимую процедуру исправляет уязвимость? –
готовые заявления не будут работать здесь, потому что заполнители в подготовленных операторах могут представлять только VALUES, а не идентификаторы. Вам придется использовать обычные методы экранирования sql. –
Вот информация о методах эвакуации SQL и связанных с ними вещах: http://stackoverflow.com/questions/139199/can-i-protect-against-sql-injection-by-escaping-single-quote-and-surrounding-use – HaukurHaf