Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Algoritmo para evitar injeção de SQL no MSSQL Server do código C#?


Não há necessidade de algoritmo - apenas não use concatenação de strings para construir instruções SQL. Em vez disso, use a coleção SqlCommand.Parameters. Isso faz todo o escape necessário de valores (como substituir ' com '' ) e garante que o comando seja seguro porque outra pessoa (ou seja, a Microsoft) fez todos os testes.

por exemplo. chamando um procedimento armazenado:
using (var connection = new SqlConnection("..."))
using (var command = new SqlCommand("MySprocName", connection))
{
    command.CommandType = CommandType.StoredProcedure;
    command.Parameters.AddWithValue("@Param1", param1Value);
    return command.ExecuteReader();
}

Essa técnica também funciona para instruções SQL embutidas, por exemplo.
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();
}