2012-04-02 12 views
0

SQLクエリでIsAdmin値を取得しようとしています(このクエリは1行または0を返します)。これは私のコードASP.net MVCでデータを取得する方法

 public static bool Login (string iduser, string password, bool IsAdmin) 
    { 
     bool auth = false; 
     string query = string.Format("Select IsAdmin from [user] where iduser = '{0}' AND mdp = '{1}' ;", iduser, password); 
     SqlCommand cmd = new SqlCommand(query, con); 
     con.Open(); 
     SqlDataReader re = cmd.ExecuteReader(); 
     auth = re.HasRows; 
     if (auth) { IsAdmin = re.GetBoolean(0); } // the error is on this line (this line will alow me to get IsAdmin Value If the user exist) 
     con.Close(); 
     return auth; 

    } 
+0

誰かがSQLインジェクションを使用してサイトをハッキングし、すべてのユーザーを削除したことがありますか?また、SqlDataReaderはIDisposableです。 –

+0

これはあなたの質問に対する答えではありませんが、SQLクエリを作成する方法はSQLインジェクション攻撃の責任を負います。常にパラメータ化されたクエリを使用する必要があります。 –

+0

これは私に ''のようなパスワードを入力することを切望しています。ドロップテーブル[ユーザー]; - ' –

答えて

6

ですが、私は {「いいえ、任意のデータが存在している。invalideは暫定読んで」}このエラーが得るあなたは恐ろしいSQL injectionに開放されています。あなたのサイトは、パラメータ化されたクエリを使用しない場合、あなたがオンラインにしたのと同じくらいの秒間、ハッカーによってpwnされます。このよう

は:

public static bool IsAdmin(string iduser, string password) 
{ 
    using (var conn = new SqlConnection(ConnectionString)) 
    using (var cmd = conn.CreateCommand()) 
    { 
     conn.Open(); 
     cmd.CommandText = @" 
      SELECT IsAdmin 
      FROM [user] 
      WHERE iduser = @iduser AND mdp = @mdp; 
     "; 
     cmd.Parameters.AddWithValue("@iduser", iduser); 
     cmd.Parameters.AddWithValue("@mdp", password); 
     using (var reader = cmd.ExecuteReader()) 
     { 
      return reader.Read() && reader.GetBoolean(reader.GetOrdinal("IsAdmin")); 
     } 
    } 
} 
+2

+1私にそれを打つ –

0

あなたはデータにアクセスしようとする前に、最初のレコードにリーダーを移動するために

re.Read(); 

を呼び出す必要があります。 re.HasRowsは、リーダーを最初のレコードに移動させることはありません。

また、は、間違いなくにパラメータ化クエリを使用します。

関連する問題