0

C# で再利用可能な MySQL データベース クラスを作成しようとしていますが、セキュリティを維持することが心配です (ビジネスでの使用の可能性)。私は多くの読書をしてきましたが、パラメーターを使用してテーブルにデータを追加したり、フェッチしたりすることをお勧めします。私の問題は、さまざまなテーブルを通じてクラスを再利用可能に保つことです現在の挿入方法(データベースクラス内):

public void Insert(string incomingQuery) //Insert Statement
{
    //Assign the incomingQuery for use.
    string query = incomingQuery;

    //Open Database Connection
     if(this.OpenConnection() == true)
     {
         //Create command and assign the query and connection from the constructor
         MySqlCommand command = new MySqlCommand(query, connection);

        //Execute the command
        command.ExecuteNonQuery();

        //Close the connection
        this.CloseConnection();
    }

}

そして、Create別のクラスから SQL クエリを渡す私のメソッド ( Users):

public void Create()
{
    //Add a new user to the database
    string sqlQuery = "INSERT INTO Users(first_name, last_name, pc_username) VALUES('" + firstName + "','" + lastName + "','" + userName + "');";
    database.Insert(sqlQuery);
    Login();
}

これをより安全にするにはどうすればよいですか?

4

3 に答える 3

2

これをより安全にするにはどうすればよいですか?

パラメータを使用します。現在のクエリはSQL インジェクションの影響を受けやすくなっています。

また、メソッドで開いている接続があるようです。データベース接続をできるだけ遅く開き、できるだけ早く閉じることをお勧めします。接続でステートメントを使用using し、メソッドで開きます。接続とコマンドはIDisposableインターフェイスを実装しているため、確実に破棄されます (接続を閉じます)。

于 2013-11-01T13:22:11.143 に答える
1

MySQL データベースでストアド プロシージャを使用し、必要なパラメータを指定してこれらのプロシージャを呼び出します。キーと値のペアのディクショナリを取得し、それらを OdbcCommand の Parameters プロパティに解析するようにユーティリティ メソッドを記述します。

C#でパラメータを使用してストアドプロシージャを呼び出す

foreach(KeyValuePar kvp in dictionary)
{
    command.Parameters.Add(kvp.Key).Value = kvp.Value;
}

正確なコードは忘れました...

于 2013-11-01T13:25:15.020 に答える
0

次のようなメソッドに、すべてのパラメータ (firstName、lastName など) を string[] (または、辞書) として渡します。

AddParamsToCommand(SqlCommand cmd, Dictionary<string,string> paramList)
{
    foreach (string s in paramList.Keys)
    {
        sqlParameter p = cmd.CreateParameter();
        p.Name = s;
        p.Value = paramList[s];
        cmd.Parameters.Add(p);
    }
}

例として。

OleDB を使用していて、SqlCommands のパラメーターに名前を付けるのを忘れていたので編集しました。

于 2013-11-01T13:27:08.137 に答える