El tipo de argumento no debe desempeñar ningún papel en la inyección de SQL que no sea la forma en que se forma la consulta SQL en primer lugar.
La inyección SQL abusa de una consulta SQL que se crea a partir del parámetro como una cadena. El servidor web trata la URL completa como una cadena y analiza todos los parámetros como una cadena también. Entonces, incluso cuando la identificación es numérica, como 1, un servidor web la trata como una cadena y el código la inserta como una cadena. Esto le permite insertar caracteres especiales, que no serían posibles si solo se permitieran los números.
Sin embargo, puede haber diferencias en la consulta SQL. Al usar una cadena en una consulta SQL, la cadena debe estar entre comillas simples '
. Los números pueden, pero no tienen que ser.
Número: SELECT * FROM Test WHERE id = $NUMBER;
Cadena: SELECT * FROM Test WHERE id = '$TEXT';
Cuando tienes una cadena encerrada entre comillas, primero debes cerrar las comillas. Entonces, por ejemplo, enviarías A'; DROP TABLES *;--
que te daría:
%código%.
Puede ver el SELECT * FROM Test WHERE id = 'A'; DROP TABLES *; --'
terminando el primer '
para que su comando '
sea tratado como un comando y no como texto. El - se usa para comentarios en SQL y aquí lo usamos para deshacernos del cierre DROP TABLES *;
. De lo contrario, causaría una consulta SQL con formato incorrecto.
Tenga en cuenta que los números PUEDEN también usar comillas en una consulta, por lo que puede ser útil usar este método de escape incluso si el sitio solo usa números en el parámetro. Además, dependiendo del motor SQL, se pueden utilizar otros tipos de comillas y comillas simples, como comillas dobles, lo que cambiaría la forma en que debe escapar de ellas.