es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo solucionar la inyección SQL en .net core para parámetros de cadena en métodos GET?

Aplicación Net Core. Tengo muchas API en mi aplicación. Ejecuté una herramienta de escaneo de seguridad y encontré una inyección SQL en la siguiente API:

[HttpGet]
[Route("getdata")]
public async Task<string> GetData(string param1 = "", string param2 = "", string param3 = "")
{
  //lógica
}

Abajo se muestra un comentario del informe de escaneo de seguridad:

URL         https://mywebapp/getdata/getdata? 
            param1=S+5.0145%27+AND+%271%27%3D%271&param2=T102.5.42&param3=Bulgaria
Método      GET
Parámetro   param1
Ataque      S 5.0-145' AND '1'='1

Tengo muchas otras API, pero no tengo comentarios de inyección SQL, por ejemplo:

[HttpGet]
[Route("mydetails/{param1}")]
public async Task<string> mydetails(string param1)
{
}

En esta API no tengo comentarios de inyección SQL. ¿Alguien puede ayudarme a solucionar esto? Cualquier ayuda sería apreciada. Gracias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para corregir la vulnerabilidad de inyección SQL en la API GetData, se deben utilizar consultas con parámetros en lugar de concatenar directamente la entrada del usuario en las declaraciones de SQL. Las consultas con parámetros aseguran que las entradas del usuario estén correctamente sanitizadas y evitan que se ejecuten declaraciones de SQL maliciosas. Aquí hay una versión actualizada de la API GetData que utiliza consultas con parámetros:

    [HttpGet]
    [Route("getdata")]
    public async Task<string> GetData(string param1 = "", string param2 = "", string param3 = "")
    {
        string query = "SELECT * FROM MyTable WHERE Param1 = @Param1 AND Param2 = @Param2 AND Param3 = @Param3";
        // Cree una nueva SqlConnection y SqlCommand para ejecutar la consulta
        using (SqlConnection connection = new SqlConnection(connectionString))
        using (SqlCommand command = new SqlCommand(query, connection))
        {
            // Agregue los parámetros a la consulta
            command.Parameters.AddWithValue("@Param1", param1);
            command.Parameters.AddWithValue("@Param2", param2);
            command.Parameters.AddWithValue("@Param3", param3);
            // Ejecute la consulta
            // ...
        }
    }
    

    Con este cambio, las entradas del usuario están correctamente sanitizadas y se elimina la vulnerabilidad de inyección SQL.

    Cabe señalar que no todas las vulnerabilidades de inyección SQL serán detectadas por herramientas de escaneo de seguridad, por lo que es importante siempre utilizar las mejores prácticas, como las consultas con parámetros, para asegurar que su aplicación sea segura.

Comments are closed.