SQL UPDATE user1 SET ? = ? WHERE account = ? 中,第一個 ? 為列名(leixing 變數值),PreparedStatement 僅支援值佔位符,不支援識別符(表名、列名)。
String[] allowedColumns = {"col1", "col2", "col3"}; // 允許修改的列
String column = request.getParameter("leixing");
if (!Arrays.asList(allowedColumns).contains(column)) {
throw new IllegalArgumentException("非法列名");
}
String sql = "UPDATE user1 SET " + column + " = ? WHERE account = ?";
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1, ipt);
pst.setString(2, account);
pst.executeUpdate();
String sql = "UPDATE user1 SET " + column + " = ? WHERE account = ?";
// 其餘相同
leixing=col1=1; DROP TABLE user1;--)。com.microsoft.sqlserver.jdbc.SQLServerDriver)。