Điều này là rất nhiều thế giới xấu, bởi vì câu hỏi của bạn ngụ ý rằng bạn có thể có lỗ hổng SQL tiêm trong ứng dụng của bạn.
Bạn nên sử dụng các câu lệnh tham số. Đối với Java, sử dụng PreparedStatement
với trình giữ chỗ . Bạn nói rằng bạn không muốn sử dụng các câu lệnh được tham số hóa, nhưng bạn không giải thích tại sao , và thật lòng mà nói, đó là một lý do rất tốt để không sử dụng chúng vì chúng là cách đơn giản nhất, an toàn nhất để khắc phục sự cố bạn đang cố gắng để giải quyết.
Xem phần Ngăn chặn SQL SQL trong Java . Đừng là nạn nhân tiếp theo của Bobby .
Không có chức năng công khai trong PGJDBC để trích dẫn và thoát chuỗi. Đó là một phần bởi vì nó có thể làm cho nó có vẻ như là một ý tưởng tốt.
Có được xây dựng trong trích dẫn các chức năng quote_literal
và quote_ident
trong PostgreSQL, nhưng họ là dành cho PL/PgSQL
chức năng sử dụng EXECUTE
. Ngày nay, quote_literal
hầu hết đã bị lỗi thời EXECUTE ... USING
, đó là phiên bản được tham số hóa , bởi vì nó an toàn và dễ dàng hơn . Bạn không thể sử dụng chúng cho mục đích bạn giải thích ở đây, vì chúng là các chức năng phía máy chủ.
Hãy tưởng tượng điều gì xảy ra nếu bạn nhận được giá trị ');DROP SCHEMA public;--
từ một người dùng độc hại. Bạn sẽ sản xuất:
insert into test values (1,'');DROP SCHEMA public;--');
trong đó chia thành hai tuyên bố và một nhận xét bị bỏ qua:
insert into test values (1,'');
DROP SCHEMA public;
--');
Rất tiếc, có cơ sở dữ liệu của bạn.