PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

O que o código após CREATE FUNCTION sendo uma string implica?


O PostgreSQL é altamente extensível e você pode, por exemplo, definir sua própria linguagem procedural para escrever funções.

O PostgreSQL não sabe nada sobre a linguagem exceto que tem que chamar um certo manipulador de linguagem para executar a função.

A maneira que foi escolhida para implementar isso é simplificar a passagem do código como uma string.

Este é apenas um detalhe de implementação e não torna as funções do PostgreSQL mais ou menos vulneráveis ​​à injeção de SQL do que outros RDBMS.

Existem vários níveis em que você deve se defender contra a injeção:

  • Os argumentos da função:Aqui você deve escolher tipos de dados não string sempre que possível.

  • As instruções SQL dentro da função:Aqui você deve evitar SQL dinâmico sempre que possível, e se você tiver que usar SQL dinâmico, você deve inserir variáveis ​​usando o %L padrão do format função.

Novamente, isso é o mesmo se os corpos das funções forem especificados como strings ou não.