PostgreSQL est hautement extensible, et vous pouvez par exemple définir votre propre langage procédural pour écrire des fonctions.
PostgreSQL ne sait rien du langage sauf qu'il doit appeler un certain gestionnaire de langage pour exécuter la fonction.
La manière qui a été choisie pour implémenter cela est de simplifier le passage du code sous forme de chaîne.
Ceci n'est qu'un détail d'implémentation et ne rend pas les fonctions PostgreSQL plus ou moins vulnérables à l'injection SQL que les autres SGBDR.
Il y a plusieurs niveaux sur lesquels vous devez vous défendre contre l'injection :
-
Les arguments de la fonction :ici, vous devez choisir des types de données autres que des chaînes dans la mesure du possible.
-
Les instructions SQL dans la fonction :ici, vous devez éviter le SQL dynamique dans la mesure du possible, et si vous devez utiliser le SQL dynamique, vous devez insérer des variables en utilisant le
%L
modèle duformat
fonction.
Encore une fois, c'est la même chose si les corps de fonction sont spécifiés sous forme de chaînes ou non.