Mi è stata mostrata una regex che, per chi l'ha scritta, dovrebbe proteggere dalle iniezioni SQL su SQL Server 2008. Non sembra proprio così, ma mi chiedo esattamente quale codice posso superare per dimostrare che non protegge.
value = Regex.Replace(userInput, "[\n\r\t\']", " ");
sqlCmd = "Select names from mytable where mycolumn like '%" + value + %'";
SQLDataAdapter results = new SQLDataAdapter(sqlCmd, connString);
Ora, ho capito che se riesco a ottenere una singola citazione, posso fare qualcosa di simile
a' union all select passwords as names from myusertable;--
Il problema è che la regex cattura la citazione singola e non ho idea di come fuggire / codificare / ect. per superare la regex. Ho cercato qualcosa, ma tutto sembra presupporre che puoi ottenere una singola citazione. Ovviamente non può essere così semplice fermare tutti gli attacchi SQL injection, ma personalmente non so cosa mettere per superarlo. Qualche aiuto?
Modifica:
Per essere un po 'più specifico, ho sentito che si possono usare caratteri unicode per inserire una virgoletta singola oltre un assegno in molte lingue dato che ci sono caratteri unicode che sono trattati come tali dal linguaggio di programmazione, ma quando ottengono al database, sono appena trattati come una citazione. Ma su questo non ho trovato altro che teoria. Quando cerco di spiegarlo, sembra che "Beh, la gente pensa che questo potrebbe accadere, ma non è mai stato dimostrato che sia effettivamente una vulnerabilità" e questo non convince il senior che lo ha programmato.