首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel导入中的SQL注入漏洞

Excel导入中的SQL注入漏洞
EN

Stack Overflow用户
提问于 2016-10-28 23:17:17
回答 1查看 1.4K关注 0票数 4

我一直在研究为ASP.NET WebForms应用程序生成的安全报告。我们的代码中的某些区域被认为是潜在的SQL注入漏洞。我一直在我们的代码库中研究这些区域,它们似乎都是我们导入excel工作簿的地方。令人不快的代码似乎是当我们试图基于工作簿中第一个工作表的名称创建一个OleDbCommand时。我们使用OleDbConnection对象建立到数据库(excel工作表)的连接,该对象读取数据库模式以查找第一个工作表的名称。然后,我们使用该名称动态构造一个SQL命令。示例代码可能如下所示:

代码语言:javascript
复制
    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注入漏洞,我一直在寻找上述代码的替代方案。有没有人知道如何在不被标记为SQL注入漏洞的情况下执行此操作?我不想使用ActiveX office对象来执行此操作。

EN

回答 1

Stack Overflow用户

发布于 2016-11-16 04:25:09

如果您知道可能的表列表,则可以创建这些表的白名单,然后根据该白名单检查电子表格名称,如第一个示例所示。您还可以进行过滤字符串方法验证,如第二个示例所示。您还可以执行RegEx检查,如上一个代码示例所示

下面是一些示例代码,您可以采用它们来执行此过滤(我只保留白名单检查未注释):

代码语言:javascript
复制
bool targetStringInArray = false;

 //Table name is in the whitelist
targetStringInArray = Array.Exists(tables, element => element == firstSheetName);

//Table Begins with begin with 'q'
//string[] tables = { "start", "q1","q3", "fyend", "q4"};
//targetStringInArray = Array.Exists(tables, firstSheetName=> firstSheetName.StartsWith("q"));

//Table name is only letters, numbers and underscores:
//targetStringInArray = Regex.IsMatch(firstSheetName, @"^[a-zA-Z0-9_]+$");



if (targetStringInArray)
{
  using (OleDbCommand command = new OleDbCommand("SELECT * FROM [" + firstSheetName+ "]", conn)) // Offending line of code
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40308183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档