我需要在 Java 应用程序中执行一条SET schema ?
语句,其中占位符被调用者在运行时提供的值替换。
我以为我可以PreparedStatement
用来克服潜在的 SQL 注入,但是如果我尝试执行准备好的语句,我会收到一条PSQLException
with 消息
ERROR: syntax error at or near "$1" Position: 18
如果我通过执行以下操作连接架构名称来执行 SQL:
public void executeSetSchema(Connection con, String schema){
try{
Statement stmt = con.createStatement();
stmt.execute("SET SCHEMA '" + schema + "'");
} catch(Exception){}
}
然后一切都按预期工作。
显然,所有最新版本的 PostgreSQL 都会发生这种情况
为什么我不能使用 PreparedStatement,我应该怎么做才能防止 SQL 注入?