C# 检查asp.net mvc中上载的Excel文件中的非法字符

C# 检查asp.net mvc中上载的Excel文件中的非法字符,c#,asp.net,asp.net-mvc,excel,linq-to-excel,C#,Asp.net,Asp.net Mvc,Excel,Linq To Excel,我正在使用asp.NETMVC4制作一个网站,用户可以上传.xlsx文件并将数据保存到MSSQL表中。在保存数据之前,我希望确保文件中没有非法字符,例如SQL注入语句。到目前为止,我使用$符号进行了测试,它可以正常工作,但只有当单元格只有该字符时,它才会捕获,而不是在字符之间。这是我的密码 控制器 public ActionResult BulkReadings() { string pathToExcelFile = System.IO.Path.Combine

我正在使用asp.NETMVC4制作一个网站,用户可以上传
.xlsx
文件并将数据保存到MSSQL表中。在保存数据之前,我希望确保文件中没有非法字符,例如SQL注入语句。到目前为止,我使用
$
符号进行了测试,它可以正常工作,但只有当单元格只有该字符时,它才会捕获,而不是在字符之间。这是我的密码

控制器

    public ActionResult BulkReadings()
    {
        string pathToExcelFile = System.IO.Path.Combine(Server.MapPath("~/ExcelFiles/"), "BulkReads.xlsx");
        string sheetName = "Sheet1";

        var excelFile = new ExcelQueryFactory(pathToExcelFile);
        var getSheet = from a in excelFile.Worksheet(sheetName) select a;
        string Subject = "";
        string Type = "";
        string Reading = "";

        foreach (var a in getSheet)
        {
            if (a["Subject"] == "$" || a["Type"] == "$" || a["Reading"] == "$")  // This is where it checks for the "$" sign
            {
                if (System.IO.File.Exists(pathToExcelFile))
                {
                    System.IO.File.Delete(pathToExcelFile);
                }
                TempData["meter_fail"] = "Error! Illegal Characters!";
                return RedirectToAction("MeterManager");
            }
            else
            {
                Subject = a["Subject"];
                Type = a["Type"];
                Reading = a["Reading"];
                try
                {
                    Reading newEntry = new Reading();
                    newEntry.title = Subject;
                    newEntry.type = Type;
                    newEntry.reading1 = Reading;
                    rentdb.Readings.Add(newEntry);
                }
                catch
                {
                    if (System.IO.File.Exists(pathToExcelFile))
                    {
                        System.IO.File.Delete(pathToExcelFile);
                    }
                    TempData["meter_fail"] = "Error! Upload Failed!";
                    return RedirectToAction("MeterManager");
                }
            }
        }
        rentdb.SaveChanges();
        if (System.IO.File.Exists(pathToExcelFile))
        {
            System.IO.File.Delete(pathToExcelFile);
        }
        TempData["meter_success"] = "Reading(s) uploaded successfully!";
        return RedirectToAction("MeterManager");
    }

如何检查多个非法字符,这些字符可以作为单个字符或与单元格中的其他字符一起出现

正如@Sam Axe所说,避免sql注入攻击的最佳方法是参数化查询。参数是值的占位符,而不是使用用户输入值

例如:

using (SqlConnection conn = new SqlConnection(NorthwindConnectionString))
{
    string query = "SELECT * FROM Products WHERE ProductID = @Id";
    SqlCommand cmd = new SqlCommand(query, conn);
    cmd.Parameters.AddWithValue("@Id", Request.QueryString["Id"]);
    conn.Open();
    using (SqlDataReader rdr = cmd.ExecuteReader())
    {
        DetailsView1.DataSource = rdr;
        DetailsView1.DataBind();
    }
}
下面是对它的进一步解读:

只要使用参数化查询,就不需要对文件进行清理,以防止awl注入。谢谢,但我没有理解你的意思。请详细解释。锥子。哈。弯腰自动校正。应该是sql。哈哈,我想。“a”和“w”与“s”和“q”键非常接近!哈哈,真有趣谢谢,但我用的是EF 6,有没有可能用EF来做呢?我个人还没有做过,但看起来也可以在那里做。下面是一篇正在进行的文章: