Proteção Contra SQL Injection em ASP.NET Core

Garanta a Segurança do seu Banco de Dados em ASP.NET Core

05/01/2024

Proteção Contra SQL Injection em ASP.NET Core

Proteção Contra SQL Injection em ASP.NET Core

Entenda como funciona este tipo de ataque

SQL Injection é um ataque que permite a invasores modificar operações de banco de dados através de um aplicativo. Isso pode resultar em acesso indevido e manipulação de dados, incluindo a exclusão de tabelas ou alteração de senhas de usuários.

Aqui está um exemplo de código ASP.NET Core vulnerável a SQL Injection, com um parâmetro de URL:

// Exemplo de código ASP.NET Core vulnerável a SQL Injection
// Recebendo 'id' da URL
string id = HttpContext.Request.Query["id"];
// Montagem insegura da consulta
string query = $"SELECT * FROM users WHERE id = {id}";
using (var command = new SqlCommand(query, connection))
{
    // Execução da consulta...
}

Este código é vulnerável porque usa diretamente um dado externo ('id' da URL) na consulta SQL. Por exemplo, se o parâmetro 'id' da URL for alterado para id=0; DROP TABLE users;, a consulta se tornará SELECT * FROM users WHERE id = 0; DROP TABLE users;, resultando na exclusão da tabela 'users' e perda de todos os dados.

Protegendo Seu Código de SQL Injection com Declarações Parametrizadas

Utilizar declarações parametrizadas é uma maneira eficiente de proteger seu código ASP.NET Core contra SQL Injection. Vamos aprimorar nosso código inicial com o uso de declarações parametrizadas:

// Protegendo o código com declarações parametrizadas
// Estabelecendo conexão
using (var connection = new SqlConnection("ConnectionString"))
{
    // Garantindo que 'id' seja um número inteiro
    int id = int.Parse(HttpContext.Request.Query["id"]);
    // Preparando a consulta com named parameter
    string query = "SELECT * FROM users WHERE id = @id"; 
    using (var command = new SqlCommand(query, connection))
    {
        command.Parameters.AddWithValue("@id", id);
        // Executando a consulta com um parâmetro seguro
        var reader = command.ExecuteReader();
        // Código para manipulação dos resultados...
    }
}

Ao converter o 'id' para um inteiro e utilizar uma declaração parametrizada, garantimos que apenas valores seguros sejam usados na consulta.

Validação de Dados de Entrada

Além de usar declarações parametrizadas, é essencial validar os dados de entrada para garantir que atendam aos critérios esperados (como tipo e formato). Esta prática adiciona uma camada extra de segurança.

Uso de Stored Procedures para Maior Segurança

Stored Procedures no SQL Server são outra forma eficaz de prevenir SQL Injection. Ao encapsular a lógica SQL dentro do banco de dados, eles reduzem a exposição à injeção de SQL.

// Usando Stored Procedures
using (var connection = new SqlConnection("ConnectionString"))
{
    using (var command = new SqlCommand("uspGetUserById", connection))
    {
        command.CommandType = CommandType.StoredProcedure;
        command.Parameters.AddWithValue("@Id", id);
        // Executando a consulta segura
        var reader = command.ExecuteReader();
        // Código para manipulação dos resultados...
    }
}

Conclusão

Proteger seu código ASP.NET Core contra SQL Injection é fundamental para garantir a segurança de suas aplicações. Neste artigo, abordamos técnicas para evitar essa vulnerabilidade, incluindo o uso de declarações parametrizadas, validação de entrada e o uso de Stored Procedures.

Lembre-se sempre de validar e tratar os dados de entrada, evitando concatenação direta em consultas SQL. A segurança de suas aplicações depende dessas práticas, evitando potenciais ataques e prejuízos.

Domínios hospedados
Clientes satisfeitos