Ho trovato un semplice breakout in una clausola where in uno dei nostri progetti in cui il codice è così vecchio da richiedere di non poter utilizzare i parametri per comunicare con ms SQL server. È scritto in C ++, non riesco a leggere questa lingua e non sono in grado di accedere al codice in alcun modo.
Per illustrare il problema ho aggiunto un esempio di un'istruzione non dannosa, la parte in grassetto è ciò che l'utente può inserire direttamente
SELECT '1 ' SELECT 2--';
L'offerta singola dopo 1 sta causando la rottura in questo scenario. Questo è ciò che ho mostrato al team.
Hanno quindi effettuato un rilevamento nel codice che cerca le virgolette singole e aggiunge altre tre virgolette singole dopo ogni singola citazione trovata. Quindi l'esempio diventerebbe questo
SELECT '1'''' SELECT 2--';
Non mi piace affatto questa soluzione, ma non riesco più a trovare un modo per uscire. I campi all'interno del database sono memorizzati trattati come caratteri nvarchar. C'è ancora la possibilità di bypassare questa pratica in qualsiasi tipo?