Soy consciente de que La inyección SQL es bastante peligroso. Ahora en mi código de C# compongo consultas parametrizadas con SqlCommand clase:

SqlCommand command = ...;
command.CommandText = "SELECT * FROM Jobs WHERE JobId = @JobId;";
command.Parameters.Add("@JobId", SqlDbType.UniqueIdentifier ).Value = actualGuid;
command.ExecuteNonQuery();

Hará esto automáticamente hacer mi código inmune a la inyección de SQL? ¿Tengo que hacer algo extra?

InformationsquelleAutor sharptooth | 2011-08-24

5 Comentarios

  1. 25

    Yo diría que para su particular, y probablemente canónica, ejemplo para las consultas parametrizadas, sí es suficiente.

    Sin embargo, a veces la gente que escribir código como este

    cmd.CommandText = string.Format("SELECT * FROM {0} WHERE col = @col;", tableName);
    cmd.Parameters.Add("@col", ...);

    porque simplemente no hay manera de pasar a la tabla de nombre a sí mismo como un parámetro y el deseo existe, a veces equivocados o no. Parece que a menudo es pasado por alto, que tableName (a menos que tal vez sólo lectura a partir de un conjunto de estática/valores constantes que no se derivan de ninguna de entrada), de hecho, permite la inyección de código SQL.

  2. 17

    De acuerdo a la Nota en este Artículo de MSDN, «Especial de entrada de caracteres que representan una amenaza sólo con SQL dinámico y no cuando se utiliza SQL parametrizada.»

    Así que yo creo que son seguros contra Inyección SQL. Puede haber algo de lógica riesgos de utilizar los Identificadores como Marca los Valores en su Url, pero esto es otra historia.

  3. 8

    La Inyección de SQL es en su mayoría dependen de la ejecución de SQL dinámico. En otras palabras, las instrucciones SQL construido por la concatenación de SQL con los valores introducidos por el usuario.

    Para evitar la Inyección SQL completamente,

    Protegerse contra ataques de inyección SQL no es muy difícil. Las aplicaciones que son inmunes a los ataques de inyección SQL validar y desinfectar todas las entradas de usuario, nunca utilizar SQL dinámico, ejecutar utilizando una cuenta con pocos privilegios, hash o cifrar sus secretos, y presente mensajes de error que revelan poco si no hay una información útil para el hacker. Siguiendo un enfoque de múltiples capas para la prevención de usted puede estar seguro de que si la defensa es burlar, usted todavía estará protegida.

    De MSDN

  4. 1

    Utilizando SqlCommand una muy buena práctica y siempre que no concatenar cadenas SQL anywhere (incluyendo el interior de ninguno de los procedimientos almacenados de llamar — es decir, evitar SQL dinámico), usted será inmune a los ataques de inyección SQL.

  5. -3

    No son inmunes a la inyección de SQL si el uso de sql dinámico, incluso si usted está pasando a través de los parámetros. Lástima que SQL Server no tiene una función integrada para desinfectar los parámetros de

    • Citación? Arriba mencionados artículos de MSDN parecen contradecir su respuesta.
    • Con la dinámica de las consultas, Si no desinfectar los parámetros antes de enviarlos a través de la consulta, usted puede insertar fácilmente una inyección de sql a través del parámetro. Pruébelo usted mismo.

Dejar respuesta

Please enter your comment!
Please enter your name here