创建SQL查询时使用java.text.MessageFormat.format()是否安全?

问题描述 投票:0回答:1

我正在使用MessageFormat.format()为我的PreparedStatement创建字符串。我读到使用StringBuilder可能​​是SQL注入的原因。 MessageFormat是否相同?

代码像这样

String SQL
        = "select CT.SYS_CHANGE_OPERATION, CT.{0} as ID, t.*\n"
        + "from changetable (changes {1}, ?) as CT \n"
        + "left outer join {2} as t \n"
        + "on t.{3} = CT.{4} \n"
        + "order by CT.SYS_CHANGE_VERSION";

String finalSQL = MessageFormat.format(SQL, primaryKey, table, table, primaryKey, primaryKey);
        PreparedStatement pstmt = con.prepareStatement(finalSQL);
java database mssql-jdbc
1个回答
1
投票

这不安全。 MessageFormat.format只是将给定字符串中{x}的出现替换为给定对象,而没有转义后者。

© www.soinside.com 2019 - 2024. All rights reserved.