我是一名新的 ASP.NET 开发人员,我正在开发一个基于 Web 的应用程序,其中有一个菜单栏,其中包含许多选项。其中一些选项将仅向管理员显示。系统背后有一个逻辑来检查用户是否是管理员。如果是,将显示选项。我写了这个方法,但我有一个 sql injectioniom,我想删除它。
供您参考,我有以下数据库设计:
- 用户表:
NetID, Name, Title
- 管理员表:
ID, NetID
这是 C# 方法:
private bool isAdmin(string username)
{
string connString = "Data Source=appSever\\sqlexpress;Initial Catalog=TestDB;Integrated Security=True";
string cmdText = "SELECT ID, NetID FROM dbo.Admins WHERE NetID = '" + NetID + "')";
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
// Open DB connection.
using (SqlCommand cmd = new SqlCommand(cmdText, conn))
{
SqlDataReader reader = cmd.ExecuteReader();
if (reader != null)
if (reader.Read())
if (reader["ID"].Equals(1))
return true;
return false;
}
}
}
我试图通过将第三行更改为:
string cmdText = "SELECT ID, NetID FROM dbo.Admins WHERE NetID = @NetID)";
但我收到以下错误,我不知道为什么:
必须声明标量变量“@NetID”。
你能帮我解决这个问题吗?
* *更新:
After updating the code to the following:
private bool isAdmin(string username)
{
string NetID = username;
string connString = "Data Source=appServer\\sqlexpress;Initial Catalog=TestDB;Integrated Security=True";
string cmdText = "SELECT ID, NetID FROM dbo.Admins WHERE NetID = @NetID";
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
// Open DB connection.
using (SqlCommand cmd = new SqlCommand(cmdText, conn))
{
cmd.Parameters.AddWithValue("@NetID", NetID);
SqlDataReader reader = cmd.ExecuteReader();
if (reader != null)
if (reader.Read())
if (reader["NetID"] == username)
return true;
return false;
}
}
}
我收到以下错误:
')' 附近的语法不正确。
如何解决这个问题?