Mon idée est de créer des classes génériques pour Insert/Update/Select via une application C# (3.5) Winforms en train de parler avec une base de données MySQL via MySQL .NET Connector 6.2.2.Connecteur C# et MySQL .NET - Un moyen de prévenir les attaques SQL Injection dans une classe générique?
Par exemple:
public void Insert(string strSQL)
{
if (this.OpenConnection() == true)
{
MySqlCommand cmd = new MySqlCommand(strSQL, connection);
cmd.ExecuteNonQuery();
this.CloseConnection();
}
}
ensuite partout dans le programme que je peux exécuter une requête avec/sans entrée utilisateur en passant simplement une chaîne de requête SQL. Lecture autour de SO commence à me donner l'indication que cela peut conduire à des attaques par injection SQL (pour toutes les valeurs d'entrée de l'utilisateur)
Y a-t-il un moyen de nettoyer le strSQL entré ou dois-je créer des requêtes paramétrées individuelles dans chaque méthode qui doit faire une fonction de base de données?
Update1:
Ma solution finale ressemble à ceci:
public void Insert(string strSQL,string[,] parameterValue)
{
if (this.OpenConnection() == true)
{
MySqlCommand cmd = new MySqlCommand(strSQL, connection);
for(int i =0;i< (parameterValue.Length/2);i++)
{
cmd.Parameters.AddWithValue(parameterValue[i,0],parameterValue[i,1]);
}
cmd.ExecuteNonQuery();
this.CloseConnection();
}}
Cette idée crie horrible. Vous devez utiliser un ORM ou écrire des procs stockés. –