5

私は新しい 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;
            }
        }
    }

次のエラーが発生しました。

')' 付近の構文が正しくありません。

この問題を解決するにはどうすればよいですか?

4

4 に答える 4

8

@NetIDパラメータに値を渡す必要があります。

cmd.Parameters.AddWithValue("@NetID", NetID);
于 2012-12-12T07:39:26.917 に答える
1

これを試して

 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))
        {
            cmd.Parameters.AddWithValue("@NetID", NetID);
            SqlDataReader reader = cmd.ExecuteReader();
            if (reader != null)
                if (reader.Read())
                    if (reader["ID"].Equals(1))
                        return true;
            return false;
        }
    }
 }
于 2012-12-12T07:59:52.903 に答える
0

IsAdminメソッドのパラメーターとしてNetIdを使用する場合、それが役立つよりも

 private bool isAdmin(string NetID)
{
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))
    {
        cmd.Parameters.AddWithValue("@NetID", NetID);
        string value = cmd.ExecuteScalar().tostring();
        if (value != null)
           return true;
       else
           return false;
    }
}

}

于 2012-12-12T09:22:37.340 に答える