[英]Preventing SQL injection when setting a sqldatasource select statement in ASP.NET c#
关于防止在我的应用程序中进行SQL注入,我有一个快速的问题。
我的Web应用程序的两个不同功能使用文本框,用户可以使用文本框从MSSQL数据库中搜索项目。 此信息显示在GridView中。
我使用以下方法创建查询:
sqldatasource.SelectCommand = "SELECT x from x where this_id LIKE '%" + txtbox.Text + "%' ORDER BY x ASC";
显然,接受用户输入并将其直接输入到这样的查询中将使它可以进行基本的SQL注入。 请有人能解释一下我该如何参数化以防止在应用程序中进行SQL注入?
提前致谢
sqldatasource.SelectCommand = @"SELECT x from x where this_id LIKE @inText ORDER BY x ASC";
cmd.Parameters.AddWithValue("@inText", "%" + txtbox.Text + "%");
请注意,如果使用通配符开始LIKE
,您将感到痛苦。 一张大桌子会很难过并且会慢慢走。
一种方法(不是很好,但总比没有好)是清理txtBox.Text的内容,然后使用清理后的结果。
sqlsource.SelectCommand = "SELECT x from x where this_id LIKE '%" + SanitizedString(txtBox.Text) + "%';";
// ... codes ...
private string SanitizedString(string given)
{
string sanitized = given.Replace(";", string.Empty);
sanitized = sanitized.Replace("--", string.Empty);
// ... ad nauseum, conditions galore ...
return sanitized;
}
...但是,这是非常劳动密集型的。
要做的是使用存储过程形式的绑定变量。 从我所看到的,您可以绑定过滤器txtbox.Text条件,然后将其传入。
查询在数据库上将非常简单,例如:
SELECT x from X where this_id LIKE :filter ORDER BY x ASC
要调用它,您需要研究MSSQL如何与存储过程进行通信。
绑定变量使您的代码完全不受SQL注入的影响。 爱绑定变量 ,因为它们会爱你。 邪恶的hax0rs不会。
感谢您的回答。 最后,我使用了MSDN网站上的参数化查询:
GetSubInfo.SelectParameters.Add("xparam", txtbox.Text);
GetSubInfo.SelectCommand = "SELECT x from x where x_id LIKE @xparam ORDER BY x ASC";
这与Hogan的答案非常相似,语法略有不同。 希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.