SQL 在 C# 中注入
SQL injection in C#
我的代码安全可靠吗?
if (con.State == ConnectionState.Closed)
con.Open();
SqlCommand cmd4 = new SqlCommand();
cmd4.Connection = con;
cmd4.CommandText = "exec [Insert_Request] @FileCode = " + FileCodeArchiveID + ", @FirstName = '" + FirstName_RequestInsert_textBox.Text + "' ";
cmd4.ExecuteNonQuery();
if (con.State == ConnectionState.Open)
con.Close();
还是使用 cmd4.Parameters.Add()
更好?
作为一般规则,在构建 SQL commands/queries 时避免使用字符串连接。特别是如果一个或多个片段来自不受信任的来源,例如用户输入。
你应该这样做:
SqlCommand cmd4 = new SqlCommand();
cmd4.Connection = con;
cmd4.CommandType = CommandType.StoredProcedure;
cmd4.CommandText = "Insert_Request";
cmd4.Parameters.AddWithValue("@FileCode", FileCodeArchiveID);
cmd4.Parameters.AddWithValue("@FirstName",FirstName_RequestInsert_textBox.Text);
cmd4.ExecuteNonQuery();
首先,它更易于阅读(在我看来),其次使用参数回避了 sql 注入漏洞。
我的代码安全可靠吗?
if (con.State == ConnectionState.Closed)
con.Open();
SqlCommand cmd4 = new SqlCommand();
cmd4.Connection = con;
cmd4.CommandText = "exec [Insert_Request] @FileCode = " + FileCodeArchiveID + ", @FirstName = '" + FirstName_RequestInsert_textBox.Text + "' ";
cmd4.ExecuteNonQuery();
if (con.State == ConnectionState.Open)
con.Close();
还是使用 cmd4.Parameters.Add()
更好?
作为一般规则,在构建 SQL commands/queries 时避免使用字符串连接。特别是如果一个或多个片段来自不受信任的来源,例如用户输入。
你应该这样做:
SqlCommand cmd4 = new SqlCommand();
cmd4.Connection = con;
cmd4.CommandType = CommandType.StoredProcedure;
cmd4.CommandText = "Insert_Request";
cmd4.Parameters.AddWithValue("@FileCode", FileCodeArchiveID);
cmd4.Parameters.AddWithValue("@FirstName",FirstName_RequestInsert_textBox.Text);
cmd4.ExecuteNonQuery();
首先,它更易于阅读(在我看来),其次使用参数回避了 sql 注入漏洞。