Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Algorithme pour éviter l'injection SQL sur MSSQL Server à partir de code C# ?

Aucun algorithme n'est nécessaire - n'utilisez simplement pas la concaténation de chaînes pour créer des instructions SQL. Utilisez plutôt la collection SqlCommand.Parameters. Cela fait tout l'échappement nécessaire des valeurs (comme le remplacement de ' avec '' ) et garantit que la commande sera sécurisée car quelqu'un d'autre (c'est-à-dire Microsoft) a effectué tous les tests.

par exemple. appeler une procédure stockée :

using (var connection = new SqlConnection("..."))
using (var command = new SqlCommand("MySprocName", connection))
{
    command.CommandType = CommandType.StoredProcedure;
    command.Parameters.AddWithValue("@Param1", param1Value);
    return command.ExecuteReader();
}

Cette technique fonctionne également pour les instructions SQL en ligne, par exemple

var sql = "SELECT * FROM MyTable WHERE MyColumn = @Param1";
using (var connection = new SqlConnection("..."))
using (var command = new SqlCommand(sql, connection))
{
    command.Parameters.AddWithValue("@Param1", param1Value);
    return command.ExecuteReader();
}