PostgreSQL jest bardzo rozszerzalny i możesz na przykład zdefiniować własny język proceduralny do pisania funkcji.
PostgreSQL nie wie nic o języku poza tym, że musi wywołać określony obsługę języka aby wykonać funkcję.
Sposób, który został wybrany do zaimplementowania tego, polega na uproszczeniu przekazywania kodu jako ciągu.
To tylko szczegół implementacji i nie sprawia, że funkcje PostgreSQL są mniej lub bardziej podatne na wstrzyknięcie SQL niż inne RDBMS.
Istnieje kilka poziomów, na których musisz bronić się przed wstrzyknięciem:
-
Argumenty funkcji:Tutaj powinieneś wybrać niełańcuchowe typy danych, kiedy tylko jest to możliwe.
-
Instrukcje SQL w funkcji:W tym przypadku należy unikać dynamicznego SQL, gdy tylko jest to możliwe, a jeśli musisz użyć dynamicznego SQL, należy wstawić zmienne za pomocą
%L
wzorzecformat
funkcja.
Znowu jest tak samo, jeśli ciała funkcji są określone jako ciągi lub nie.