sql >> Databasteknik >  >> RDS >> Sqlserver

Algoritm för att undvika SQL-injektion på MSSQL Server från C#-kod?

Det behövs ingen algoritm - använd bara inte strängsammansättning för att bygga SQL-satser. Använd samlingen SqlCommand.Parameters istället. Detta gör all nödvändig escape av värden (som att ersätta '). med '' ) och säkerställer att kommandot är säkert eftersom någon annan (dvs. Microsoft) har gjort alla tester.

t.ex. anropa en lagrad procedur:

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

Denna teknik fungerar även för inline SQL-satser, t.ex.

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


  1. Använda Substr med Instr för att extrahera en sträng i Oracle

  2. Databasprofilering i IRI Workbench

  3. CTE för att få alla barn (ättlingar) till en förälder

  4. Hur kan jag använda MySQL-tilldelningsoperatorn(:=) i en inbyggd fråga i viloläge?