Vai al contenuto

SQL injection

La SQL injection si verifica quando dati esterni cambiano la struttura di una query. Il binding dei parametri riguarda valori, non diritti di accesso.

Sicurezza informatica

La SQL injection consiste nell’introdurre frammenti di istruzioni SQL attraverso i dati elaborati da un’applicazione. Se questi valori vengono inseriti nel testo di una query, possono cambiarne il significato. Quali dati possano essere letti o modificati dipende, fra l’altro, dai permessi dell’account di database usato.

Separare filtro di progetto e struttura della query

Un portale di ticket fittizio cerca le voci associate a un riferimento di progetto. Tratta il valore del campo projectRef come un parametro associato alla query: la struttura è fissa e il valore viene passato separatamente attraverso l’interfaccia del database. Deve restare un valore di ricerca senza diventare parte della sintassi SQL.

Limitarsi a preparare una query dopo averla composta con gli input non crea questa separazione. Nemmeno dati già salvati o valori provenienti da altri sistemi devono diventare testo SQL non controllato nella costruzione di una query successiva.

Associare i valori e fissare le scelte strutturali

Un campo di ordinamento come sortKey è un caso diverso. I segnaposto per i valori non sostituiscono nomi arbitrari di colonne o direzioni di ordinamento. L’applicazione associa quindi le selezioni note a colonne e direzioni fisse definite nel codice. OWASP descrive esplicitamente questa distinzione tra binding dei parametri e scelte strutturali consentite.

Il binding dei parametri non verifica inoltre se la persona autenticata possa accedere al progetto richiesto. Questo controllo resta responsabilità dell’applicazione. Un account di database limitato ai permessi necessari può contenere i danni possibili; non elimina la costruzione non sicura delle query.

Fonti