PostgreSQL có khả năng mở rộng cao và ví dụ như bạn có thể xác định ngôn ngữ thủ tục của riêng mình để viết các hàm.
PostgreSQL không biết gì về ngôn ngữ ngoại trừ việc nó phải gọi một trình xử lý ngôn ngữ nhất định để thực thi chức năng.
Cách được chọn để triển khai điều này là đơn giản hóa việc chuyển mã dưới dạng một chuỗi.
Đây chỉ là một chi tiết triển khai và không làm cho các hàm PostgreSQL dễ bị tấn công bởi SQL injection hơn các RDBMS khác.
Có một số cấp độ mà bạn phải tự bảo vệ mình khỏi bị tiêm:
-
Các đối số của hàm:Tại đây, bạn nên chọn các kiểu dữ liệu không phải là chuỗi bất cứ khi nào có thể.
-
Các câu lệnh SQL trong hàm:Ở đây bạn nên tránh SQL động bất cứ khi nào có thể và nếu bạn phải sử dụng SQL động, bạn nên chèn các biến bằng cách sử dụng
%L
mẫu của định dạngformat
chức năng.
Một lần nữa, điều này cũng tương tự nếu các thân hàm được chỉ định dưới dạng chuỗi hay không.