Postgres consente l'esecuzione dinamica del codice, che potrebbe renderlo vulnerabile all'iniezione SQL.
Quali misure protettive ha contro questo?
Postgres consente l'esecuzione dinamica del codice, che potrebbe renderlo vulnerabile all'iniezione SQL.
Quali misure protettive ha contro questo?
Come qualsiasi altro database che usa SQL, usa quanto segue (tratto dal foglio cheat OWASP)
L'iniezione SQL è una minaccia dell'applicazione, non una minaccia del database. Alla fine, tutti i database relazionali eseguono l'SQL che viene passato a loro come una stringa. Ed è responsabilità dello sviluppatore dell'applicazione assicurarsi che la stringa SQL non sia dannosa.
L'iniezione SQL è un modo per far sì che un'applicazione possa inviare stringhe SQL al database che sono dannose e farlo in un modo che potrebbe non essere ovvio nella prima vista allo sviluppatore dell'applicazione. Per esempio. se l'applicazione contiene codice come
string sql_stmt = "select a from t where k = '" + textfield.text + "'"
dove textfield.text
sarebbe un testo inserito dall'utente nell'applicazione e tu invii sql
al database, quindi un utente intelligente potrebbe inserire
';drop table t; --
nel campo di testo, che risulterebbe nella stringa
select a from t where k = '';drop table t; --'
viene inviato al database e la tabella t
verrebbe eliminata.
Ma questo è un errore dello sviluppatore dell'applicazione, non del database. Il database esegue solo qualsiasi cosa sia stata inviata a SQL. E alla fine deve avere la possibilità di rilasciare tabelle.
Come già affermato da @RoryAlsop nella sua risposta, Postgres - come molti altri database - offre un certo supporto agli sviluppatori di applicazioni per facilitare lo sviluppo di codice sicuro (autorizzazioni, istruzioni preparate, ecc.), ma alla fine è responsabilità del sviluppatore di applicazioni per utilizzare questi o altri metodi per proteggere l'applicazione contro l'iniezione SQL, poiché è lì che si può verificare. I database non sono il livello in cui si tratta di una minaccia, ma solo dove si verifica l'effetto dell'errore.
Leggi altre domande sui tag sql-injection postgresql