PostgreSQL è altamente estensibile e puoi ad esempio definire il tuo linguaggio procedurale in cui scrivere funzioni.
PostgreSQL non sa nulla della lingua tranne che deve chiamare un determinato gestore di lingua per eseguire la funzione.
Il modo scelto per implementarlo è semplificare il passaggio del codice come stringa.
Questo è solo un dettaglio di implementazione e non rende le funzioni PostgreSQL più o meno vulnerabili all'iniezione SQL rispetto ad altri RDBMS.
Ci sono diversi livelli su cui devi difenderti dall'iniezione:
-
Gli argomenti della funzione:qui dovresti scegliere tipi di dati non stringa quando possibile.
-
Le istruzioni SQL all'interno della funzione:qui dovresti evitare l'SQL dinamico quando possibile, e se devi usare l'SQL dinamico, dovresti inserire variabili usando il
%L
modello delformat
funzione.
Di nuovo, questo è lo stesso se i corpi delle funzioni sono specificati come stringhe o meno.