귀하의 질문에 아마도 응용 프로그램에 SQL 주입 구멍 이있을 수 있음을 암시하기 때문에 이것은 매우 나쁜 세계입니다 .
매개 변수화 된 명령문을 사용해야합니다. Java의 경우 PreparedStatement
자리 표시 자와 함께 사용하십시오 . 당신은 매개 변수화 된 문장을 사용하고 싶지 않다고 말하지만, 왜 그런지 설명하지 않습니다. 솔직히 말해서, 당신이 시도하는 문제를 해결하는 가장 간단하고 안전한 방법이기 때문에 사용하지 않는 것이 좋습니다. 해결하다.
Java에서 SQL 삽입 방지를 참조하십시오 . 바비가 되지 마십시오 의 다음 피해자가 .
PgJDBC에는 문자열 인용 및 이스케이프에 대한 공용 함수가 없습니다. 그것은 좋은 생각처럼 보일 수 있기 때문에 부분적으로입니다.
가 있습니다 내장 된 기능을 인용 quote_literal
와 quote_ident
PostgreSQL을에 있지만위한 PL/PgSQL
사용하는 기능 EXECUTE
. 요즘은 quote_literal
대부분에 의해 대체되는 EXECUTE ... USING
인 매개 변수화 버전 이 있기 때문에, 안전 하고 쉽게 . 서버 측 기능이기 때문에 여기서 설명하는 목적으로 사용할 수 없습니다.
');DROP SCHEMA public;--
악의적 인 사용자로부터 가치를 얻으면 어떻게 될지 상상해보십시오 . 당신은 생산할 것입니다 :
insert into test values (1,'');DROP SCHEMA public;--');
다음 두 문장으로 나누어지고 주석은 무시됩니다.
insert into test values (1,'');
DROP SCHEMA public;
--');
혹시 데이터베이스가 있습니다.