【发布时间】:2020-01-28 11:53:18
【问题描述】:
我正在使用 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);
【问题讨论】:
-
使用库转义所有用户输入
-
@toastedDeli 没有用户输入。我在 switch case 中使用它,而不是编写相同的脚本 50 次。
-
如果
primaryKey和table不包含用户输入,它应该是安全的。但是使用StringBuilder也是安全的。
标签: java database mssql-jdbc