2010-12-23 4 views
0

Webアプリケーション(asp.net & C#)、 をビルドしています。ビルドしているdbに接続したいのですが、dbと接続して安全にやっています。 SQLインジェクション)。 私のクエリは非常に単純で複雑ではありません。ASP.NETアプリケーションからデータベースにアクセスするには?

私はストアドプロシージャ、準備されたステートメント、LiNQ について少し読んでいます。それはすべて私を本当に混乱させます。

誰かが私にどのようにしてそれを読むのを教えることができますか?

答えて

3

ASP.NETでのデータベースへのアクセスは、ASP.NETが.NETアプリケーションであるため、任意の.NETアプリケーションでのデータベースへのアクセスと同じです。そして、.NETでリレーショナルデータベースにアクセスする方法は、ADO.NETを使用することです。

パラメータ化されたクエリを使用している限り、SQLインジェクションに対して安全です。のは、SQL Serverと例を見てみましょう:

string firstname = "John"; 
using (var conn = new SqlConnection("Server=myServerAddress;Database=myDataBase;User ID=myUsername;Password=myPassword;Trusted_Connection=False;")) 
using (var cmd = conn.CreateCommand()) 
{ 
    conn.Open(); 
    cmd.CommandText = "SELECT lastname FROM mytable WHERE firstname = @firstname;"; 
    cmd.Parameters.AddWithValue("@firstname", firstname); 
    using (var reader = cmd.ExecuteReader()) 
    { 
     while (reader.Read()) 
     { 
      string lastName = reader.GetString(0); 
      // do something with the value 
     } 
    } 
} 

は今、次の(悪いコード)との比較:

string firstname = "John"; 
using (var conn = new SqlConnection("Server=myServerAddress;Database=myDataBase;User ID=myUsername;Password=myPassword;Trusted_Connection=False;")) 
using (var cmd = conn.CreateCommand()) 
{ 
    conn.Open(); 
    cmd.CommandText = "SELECT lastname FROM mytable WHERE firstname = '" + firstname + "';"; 
    using (var reader = cmd.ExecuteReader()) 
    { 
     while (reader.Read()) 
     { 
      string lastName = reader.GetString(0); 
      // do something with the value 
     } 
    } 
} 

この第二の例は悪いとSQLインジェクションの脆弱性です。したがって、基本的には、クエリ文字列を作成するときに+演算子を使用するたびに間違っています。

そして、すべてのSQLクエリを書くことに飽きたら、ORMを使うとよいでしょう。 .NETに同梱されているものはADO.NET Entity Frameworkです。

関連する問題