Esistono alcuni tipi di software, come ORM e builder di query, che devono concatenare nomi di colonne e tabelle in query SQL. Dal momento che gli sviluppatori mettono apparentemente dati non attendibili in tutti i tipi di posizioni senza pensieri secondari, una strategia ragionevole per una tale libreria sarebbe quella di verificare che il nome fornito sia effettivamente un nome e non un attacco SQLi.
Un modo semplice per farlo sarebbe quello di confrontare una regex come /[a-zA-Z_]+/
. Tuttavia, ciò limiterebbe i nomi delle colonne che possono essere utilizzati. Molti DBMS sono abbastanza liberali su quali nomi di colonne autorizzano e non voglio introdurre restrizioni artificiali.
Quindi, quello che sto cercando è un approccio per convalidare o disinfettare i nomi delle colonne e delle tabelle del database. Potrebbe essere un ordine alto, ma idealmente sarebbe:
- Funziona con tutti i principali database - Postgres, MySQL, Oracle, MSSQL, ecc.
- Limita i nomi delle colonne che possono essere utilizzati il meno possibile.
- Essere immune a SQLi.
I compromessi possono essere fatti in relazione a # 1 e # 2, ma non # 3.