Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Algorithmus zur Vermeidung von SQL-Injection auf MSSQL Server aus C#-Code?

Es ist kein Algorithmus erforderlich - verwenden Sie einfach keine Zeichenfolgenverkettung, um SQL-Anweisungen zu erstellen. Verwenden Sie stattdessen die SqlCommand.Parameters-Auflistung. Dadurch werden alle notwendigen Escapezeichen für Werte ausgeführt (z. B. das Ersetzen von ' mit '' ) und stellt sicher, dass der Befehl sicher ist, da jemand anderes (z. B. Microsoft) alle Tests durchgeführt hat.

z.B. Aufruf einer gespeicherten Prozedur:

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

Diese Technik funktioniert auch für Inline-SQL-Anweisungen, z. B.

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();
}