PostgreSQL sangat dapat diperluas, dan misalnya Anda dapat menentukan bahasa prosedural Anda sendiri untuk menulis fungsi.
PostgreSQL tidak tahu apa-apa tentang bahasa tersebut kecuali bahwa ia harus memanggil penangan bahasa tertentu untuk menjalankan fungsi.
Cara yang dipilih untuk mengimplementasikannya adalah dengan menyederhanakan pass kode sebagai string.
Ini hanyalah detail implementasi dan tidak membuat fungsi PostgreSQL lebih atau kurang rentan terhadap injeksi SQL dibandingkan RDBMS lainnya.
Ada beberapa level di mana Anda harus mempertahankan diri dari injeksi:
-
Argumen fungsi:Di sini Anda harus memilih tipe data non-string bila memungkinkan.
-
Pernyataan SQL dalam fungsi:Di sini Anda harus menghindari SQL dinamis bila memungkinkan, dan jika Anda harus menggunakan SQL dinamis, Anda harus memasukkan variabel menggunakan
%L
polaformat
fungsi.
Sekali lagi, ini sama jika badan fungsi ditentukan sebagai string atau tidak.