防止在SELECT语句中注入SQL
本文关键字:注入 SQL 语句 SELECT | 更新日期: 2023-09-27 18:17:14
我使用VS2005 c# ASP。. NET和SQL Server 2005.
我在我的asp页面上有一个搜索功能,我觉得我的SELECT查询容易受到SQL注入。这是我当前的SELECT语句:
string LoggedInUser = (User.Identity.Name);
SqlDataSource1.SelectCommand = "SELECT * FROM [TABLE1] where [" + DropDownList1.Text + "] like '%" + searchTB.Text + "%' AND [empUser] LIKE '%"+LoggedInUser+"%'";
SqlDataSource1.DataBind();
*其中searchTB
是我的搜索文本框;DropDownList1
是我的搜索类别;其中,LoggedInUser
为登录用户的用户名。
我在INSERT语句中实现了参数而不是连接:
string sql = string.Format("INSERT INTO [TABLE2] (Username) VALUES (@Username)");
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("Username", usernameTB.Text);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
我想改变我的SELECT语句像我的INSERT语句,使用参数代替。我可以知道怎么换吗?
谢谢
您可以使用
为selectcommand添加参数SqlDataSource s = new SqlDataSource();
s.SelectParameters.Add("paramName", "paramValue");
还有其他用于删除、更新和插入的参数集合
s.DeleteParameters
s.UpdateParameters
s.InsertParameters
更多信息:
MSDN: SqlDataSource。SelectParameters地产
以编程方式使用SqlDataSource
希望对您有所帮助
参见在SqlDataSource控件中使用参数
和SqlDataSource。SelectParameters地产
您可以为SqlDataSource指定SelectParameters
属性以使用参数化SQL查询
编写一个获取数据源的方法,并为查询使用sql参数。下面是一个如何在命令对象
中添加参数的好例子SqlCommand command = new SqlCommand(commandText, connection);
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = customerID;
我将为查询使用一个方法,以便将数据库访问从UI功能中分离出来。此外,这还允许重用查询。 在查询中动态指定字段名并不是一项简单的任务,所以我建议对字段名进行切换/大小写验证,如下所示:
switch (DropDownList1.Text)
{
case "ValidField1":
case "ValidField2":
...
break;
default:
throw new ArgumentException(...); // or prevent query execution with some other statement
}
SqlDataSource1.SelectCommand = "SELECT * FROM [TABLE1] where [" + DropDownList1.Text + "] like @value AND [empUser] LIKE @user";
SqlDataSource1.SelectParameters.Add("value", "%" + searchTB.Text + "%");
SqlDataSource1.SelectParameters.Add("user", "%"+LoggedInUser+"%");
SqlDataSource1.DataBind();
-
您可以简单地使用SQL数据源的过滤器表达式
-
你可以用object datasource/datatable编写你自己的select函数方法