Tengo una base de datos que utiliza codificación de caracteres de Windows-1252 y SQL dinámico que hace que la simple comilla simple se escape de esta manera ...
l_str := REPLACE(TRIM(someUserInput),'''','''''');
Debido a que el DB es windows-1252 cuando el notorio carácter de Unicode 'MODIFIER LETTER APOSTROPHE' (U + 02BC) se envía, se convierte.
Ejemplo: la aplicación front-end envía esto ...
TESTʼEND
Pero termina buscando en esto ...
and someColumn like '%TESTʼEND%'
Lo que quiero saber es que, dado que ʼ
se convirtió en ʼ
(lo que afortunadamente es seguro solo produce resultados de búsqueda erróneos), ¿existe algún escenario en el que un personaje que no sea windows-1252 pueda convertirse en algo que ¿Rompirá esto haciendo así posible la inyección SQL?
Sé acerca de las variables de enlace, sé que el DB también debería ser unicode, eso no es lo que estoy preguntando aquí. Necesito una prueba de que lo que ves arriba no es seguro. He buscado por días y no puedo encontrar una manera de causar la inyección de SQL cuando hago comillas simples que se escapan así cuando el DB es windows-1252. Gracias!
Ah, y siempre suponiendo que la columna que se busca es un varchar
, no number
. Soy consciente de los problemas y cómo cambian las cosas cuando se trata de números. Entonces asuma que este es siempre el caso:
l_str := REPLACE(TRIM(someUserInput),'''','''''');
...
... and someVarcharColumn like '%'||l_str||'%'