PostgreSQL je vysoce rozšiřitelný a můžete si například definovat svůj vlastní procedurální jazyk pro zápis funkcí.
PostgreSQL neví o tomto jazyce nic kromě toho, že musí zavolat určitý jazykový handler k provedení funkce.
Způsob, který byl zvolen k implementaci, je zjednodušení předávání kódu jako řetězce.
Toto je pouze detail implementace a nečiní funkce PostgreSQL více či méně zranitelnými vůči SQL injection než jiné RDBMS.
Existuje několik úrovní, na kterých se musíte před injekcí bránit:
-
Argumenty funkce:Zde byste měli zvolit neřetězcové datové typy, kdykoli je to možné.
-
Příkazy SQL ve funkci:Zde byste se měli vyhnout dynamickému SQL, kdykoli je to možné, a pokud musíte použít dynamické SQL, měli byste vložit proměnné pomocí
%L
vzorformat
funkce.
Opět je to stejné, pokud jsou těla funkcí zadána jako řetězce nebo ne.