Estoy enseñando seguridad informática en politécnicos. A menudo, para los estudiantes tienen cierta confusión sobre los términos utilizados para la inyección de SQL, así que permítanme aclarar.
En el contexto de una aplicación web como Facebook,
La inyección SQL es cuando el usuario web normal ingresa el código SQL en los campos de datos
Por ejemplo,
' OR '1'='1 into the textboxes of a login form.
La mejor persona para evitar la inyección de SQL es el desarrollador web, también conocido como el responsable de escribir el código de la aplicación web para leer / escribir datos en la base de datos.
La forma más fácil de evitar la inyección de SQL por parte del desarrollador web es usar consultas parametrizadas.
Las declaraciones preparadas y las consultas parametrizadas significan lo mismo.
Usaré consultas parametrizadas a partir de este punto.
Las consultas parametrizadas se refieren a la forma en que el código SQL se define primero y luego los datos se colocan dentro de los parámetros apropiados.
Por ejemplo, en .Net
Update 'users' set 'name' = @name where 'id' = @id
los parámetros @name y @id son los datos. El resto son el código SQL.
Tenga en cuenta que las consultas parametrizadas son generalmente pero no siempre realizadas en el código de la aplicación web.
Hay 2 formas comunes de escribir consultas parametrizadas.
- En el código de la aplicación web, dependiendo del idioma utilizado
- En la base de datos usando procedimientos almacenados
Entonces, en cierto sentido, sí, los procedimientos almacenados son una forma de consultas parametrizadas.
Hay otras formas de evitar la inyección de SQL mediante el escape de caracteres especiales como comillas simples. Por ejemplo, en PHP, puede usar mysql_real_escape_string que básicamente solo coloca barras antes de las comillas simples.
Esto no es ideal debido a problemas con% y subrayado para el operador LIKE en ciertas bases de datos como MySQL. Consulte este pdf para obtener más detalles.
En pocas palabras, todas las opciones sugeridas tienen que ver con la limpieza (limpieza) de las entradas del usuario para eliminar el código SQL.
La mejor manera es utilizar consultas parametrizadas en función del lenguaje de programación utilizado.
Fin de la historia.