首页 > 解决方案 > C#中的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()

标签: c#sql-serversql-injection

解决方案


作为一般规则,在构建 SQL 命令/查询时避免使用字符串连接。特别是如果一个或多个片段来自不受信任的来源,例如用户输入。

你应该这样做:

     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 注入漏洞。


推荐阅读