私は新しい ASP.NET 開発者で、多くのオプションを持つメニュー バーがある Web ベースのアプリケーションを開発しています。これらのオプションの一部は、管理者のみに表示されます。システムの背後には、ユーザーが管理者かどうかを確認するロジックがあります。はいの場合、オプションが表示されます。メソッドを作成しましたが、SQL インジェクションがあり、それを削除したいと考えています。
参考までに、次のデータベース設計があります。
- ユーザーテーブル:
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;
}
}
}
3行目を次のように変更して、変更しようとしました。
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;
}
}
}
次のエラーが発生しました。
')' 付近の構文が正しくありません。
この問題を解決するにはどうすればよいですか?