PostgreSQL är mycket utbyggbart, och du kan till exempel definiera ditt eget procedurspråk att skriva funktioner i.
PostgreSQL vet ingenting om språket förutom att det måste anropa en viss språkhanterare för att utföra funktionen.
Sättet som valdes för att implementera detta är att förenkla att skicka koden som en sträng.
Detta är bara en implementeringsdetalj och gör inte PostgreSQL-funktioner mer eller mindre sårbara för SQL-injektion än andra RDBMS.
Det finns flera nivåer där du måste försvara dig mot injektion:
-
Funktionsargumenten:Här bör du välja icke-strängdatatyper när det är möjligt.
-
SQL-satserna i funktionen:Här bör du undvika dynamisk SQL när det är möjligt, och om du måste använda dynamisk SQL bör du infoga variabler med
%L
mönstret förformat
funktion.
Återigen, detta är detsamma om funktionskroppar anges som strängar eller inte.