PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Was bedeutet der Code nach CREATE FUNCTION als String?

PostgreSQL ist sehr erweiterbar, und Sie können beispielsweise Ihre eigene prozedurale Sprache definieren, um darin Funktionen zu schreiben.

PostgreSQL weiß nichts über die Sprache, außer dass es einen bestimmten Sprachhandler aufrufen muss um die Funktion auszuführen.

Der gewählte Weg, dies zu implementieren, besteht darin, den Code als Zeichenfolge zu übergeben.

Dies ist nur ein Implementierungsdetail und macht PostgreSQL-Funktionen nicht mehr oder weniger anfällig für SQL-Injection als andere RDBMS.

Es gibt mehrere Ebenen, auf denen Sie sich gegen die Injektion wehren müssen:

  • Die Funktionsargumente:Hier sollten Sie möglichst Nicht-String-Datentypen wählen.

  • Die SQL-Anweisungen innerhalb der Funktion:Hier sollten Sie möglichst auf dynamisches SQL verzichten, und wenn Sie dynamisches SQL verwenden müssen, sollten Sie Variablen mit dem %L einfügen Muster des format Funktion.

Auch hier gilt, ob Funktionskörper als Strings angegeben werden oder nicht.