2

asp.net MVC 4 を使用して、ユーザーが.xlsxファイルをアップロードし、データを MSSQL テーブルに保存できる Web サイトを作成しています。データを保存する前に、ファイル内に 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");
    }

単一の文字として、またはセル内の他の文字と一緒に存在する可能性のある複数の不正な文字を確認するにはどうすればよいですか?

4

1 に答える 1

1

@Sam Ax が述べたように、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();
    }
}

これについてさらに読んでください: https://msdn.microsoft.com/library/bb738521(v=vs.100).aspx

于 2016-02-06T05:48:09.560 に答える