Editar: a la luz de la referencia de OP a Blind SQL Injection
No veo ninguna forma en la que la "inyección de SQL basada en cadenas de caracteres" pueda interpretarse específicamente como una forma de inyección de SQL oculta. La inyección ciega de SQL puede ocurrir en cualquier tipo de datos, no en solo cadenas. Por supuesto, puede basarse en cadenas, pero no más que la inyección normal de SQL.
Es cierto que hay al menos un par de artículos en línea, pero creo que han confundido el término. Por ejemplo,
Los artículos de fuentes más confiables como OWASP no parecen establecer ningún vínculo entre los términos "basado en cadenas" y "ciegos", pero no dude en corregirme. Además, su pregunta parece describir lo que se conoce como Error SQL Inyección que no es ciega, ni está específicamente "basada en cadenas".
Sin embargo, aquí está mi respuesta original que cubre la inyección SQL de cadenas en comparación con otros tipos de datos ...
Esto se reduce a dónde se está inyectando el parámetro vulnerable; más específicamente, ya sea que se inyecte entre comillas (una cadena) o de otra forma (por ejemplo, enteros, marcas de tiempo, etc.).
Por ejemplo, considere la siguiente URL:
http://www.example.com/search?id=23&txt=my+search+string
Ahora supongamos que estos se incorporan dinámicamente a una consulta a través de PHP de la siguiente manera:
$id = $_GET('id');
$txt = $_GET('txt');
$querystring = "SELECT * FROM items WHERE id = $id OR txt = '$txt'"
Si $querystring
se ejecutara en SQL, en este caso ambos parámetros serían vulnerables (se han concatenado sin validación ni desinfección).
Sin embargo, el parámetro txt está contenido dentro de las comillas '
, lo que significa que para ejecutar sentencias SQL arbitrarias, primero debe escapar de la cadena incluyendo un carácter '
(es decir, terminamos la cadena nosotros mismos para que nuestro SQL se incluye más adelante). Esto se debe a que cualquier cosa dentro de las comillas forma parte de la cadena de búsqueda y, por lo tanto, no se ejecutará.
Por ejemplo:
http://www.example.com/search?id=23&txt='+OR+1=1--
Esto daría como resultado un $querystring
que parecía:
SELECT * FROM items WHERE id = 23 OR txt = '' OR 1=1--'
Así que hemos 'escapado' de la cadena inyectando nuestro propio '
. Por lo tanto, este caso depende en gran medida de poder incluir el carácter '
.
Mientras que el parámetro id solo necesita algunos espacios en blanco:
http://www.example.com/search?id=23+OR+1=1--&txt=my+search+string
...
SELECT * FROM items WHERE id = 23 OR 1=1 OR txt = 'my search string'