我正在使用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 语句一样。我可以知道应该怎么改变它?
谢谢
答案 0 :(得分:4)
您可以使用
将参数添加到selectcommandSqlDataSource s = new SqlDataSource();
s.SelectParameters.Add("paramName", "paramValue");
还有其他参数集合可供删除,更新和插入。
s.DeleteParameters
s.UpdateParameters
s.InsertParameters
更多信息:
MSDN: SqlDataSource.SelectParameters Property
Programmatically Using SqlDataSource
希望这会有所帮助
答案 1 :(得分:2)
编写一个获取数据源的方法,并使用sql参数进行查询。 Here是如何在命令对象中添加参数的一个很好的例子
SqlCommand command = new SqlCommand(commandText, connection);
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = customerID;
我会使用一种方法进行查询,以便将数据库访问与UI功能分开。此外,这允许重用查询。
答案 2 :(得分:2)
请参阅Using Parameters with the SqlDataSource Control
SqlDataSource.SelectParameters Property
您可以为SqlDataSource指定SelectParameters
属性以使用参数化SQL查询
答案 3 :(得分:1)
在查询中动态指定字段名并不是一项简单的任务,所以我建议只对字段名进行切换/案例验证,如下所示:
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();
答案 4 :(得分:0)
您只需对SQL数据源使用过滤器表达式SQL Datasource filter expression
您可以使用object datasource / datatable编写自己的select函数方法