【发布时间】:2021-06-26 21:52:40
【问题描述】:
我有一个用户登录菜单。我想根据用户的级别重定向用户。级别数据位于 SQL 表中。我想根据用户名从表中获取级别数据并将其分配给变量。
protected void btnDefault_Click(object sender, EventArgs e)
{
//filter entered text
string strUserName = Tools.checkSQLInjection(txtUserName.Text).Trim();
string strPassword = Tools.checkSQLInjection(txtPassword.Text);
string strError = "";
//Get Dealer Level Value
SqlCommand command = new SqlCommand("SELECT dealerLvl FROM Users where email='" + strUserName + "'");
string strDealerLvl = "dealerLvl".ToString();
int intDealerLvl;
bool isParsable = Int32.TryParse(strDealerLvl, out intDealerLvl);
if (strDealerLvl == "1")
{ Response.Redirect("/dealers/dashboard"); }
else if (strDealerLvl == "2")
{ Response.Redirect("/dealers/dashboard-2"); }
【问题讨论】:
-
您的代码易受 SQL 注入攻击。请使用参数化查询。
-
是的,除非您删除 sql 注入漏洞,否则很少有人能够帮助您,因为没有好的答案会包含上面的代码。
-
不要依赖自制的sql注入预防工具。参数化查询是一种经过验证的系统,可以避免 sql 注入。 (而且你的代码会更清晰,更不容易出现语法错误,并且可以通过sql引擎进行优化)
-
但是,您似乎需要阅读一些关于如何创建选择命令、执行它并阅读结果的教程。例如:dotnettutorials.net/lesson/ado-net-sqlcommand-class