Ho un DB che utilizza la codifica dei caratteri di windows-1252 e SQL dinamico che esegue una semplice virgoletta con escape come questa ...
l_str := REPLACE(TRIM(someUserInput),'''','''''');
Poiché il DB è Windows-1252 quando il famigerato Unicode Character "MODIFIER LETTER APOSTROPHE" (U + 02BC) viene inviato viene convertito.
Esempio: l'app front-end lo invia ...
TESTʼEND
Ma finisce per cercare su questo ...
and someColumn like '%TESTʼEND%'
Quello che voglio sapere è che poiché ʼ
è stato convertito in ʼ
(che fortunatamente è sicuro produce solo risultati di ricerca errati) c'è qualche scenario in cui un non-windows-1252 caratteri può essere convertito in qualcosa che Rompere questo rendendo così possibile l'iniezione SQL?
Conosco le variabili di bind, so che anche il DB dovrebbe essere unicode, non è quello che sto chiedendo qui. Ho bisogno di prove che ciò che vedi qui sopra non è sicuro. Ho cercato per giorni e non riesco a trovare un modo per causare l'iniezione SQL quando si esegue un semplice escape di virgoletta semplice come questo quando il DB è Windows-1252. Grazie!
Oh, e sempre supponendo che la ricerca della colonna sia varchar
, non number
. Sono consapevole dei problemi e di come le cose cambiano quando si tratta di numeri. Supponiamo che questo sia sempre il caso:
l_str := REPLACE(TRIM(someUserInput),'''','''''');
...
... and someVarcharColumn like '%'||l_str||'%'