У меня есть два метода, когда мне сказали, что "тот факт, что вы разрешаете указать имя столбца, - это (риск SQL-инъекции)". Что это значит? Укажите, кем? И как я могу это исправить?
public void tableChanged(TableModelEvent e) {
int row = e.getFirstRow();
int col = e.getColumn();
model = (MyTableModel) e.getSource();
String stulpPav = model.getColumnName(col);
Object data = model.getValueAt(row, col);
Object studId = model.getValueAt(row, 0);
System.out.println("tableChanded works");
try {
new ImportData(stulpPav, data, studId);
bottomLabel.setText(textForLabel());
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
public class ImportData {
public ImportData(String a, Object b, Object c)
throws ClassNotFoundException, SQLException {
PreparedStatement prepStmt = null;
try {
connection = TableWithBottomLine.getConnection();
String stulpPav = a;
String duom = b.toString();
String studId = c.toString();
System.out.println(duom);
String updateString = "update finance.fin " + "set ? = ? " + "where ID = ? "+ ";";
prepStmt = connection.prepareStatement(updateString);
prepStmt.setString(1, stulpPav);
prepStmt.setString(2, duom);
prepStmt.setString(3, studId);
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (prepStmt != null)
prepStmt.close();
System.out.println("Data was imported to database");
}
}
}
Что это значит? :)
Это означает, что если бы строка была изменена, вы могли бы поместить код SQL, чтобы сделать что-то другое, например, обновить пароль или получить доступ к системам.
Укажите, кем?
Любой код, который может получить доступ к имени столбца, это только проблема, если пользователь имеет доступ к этому полю.
И как я могу это исправить?
Убедитесь, что пользователь не может указать это имя столбца и игнорировать сообщение
update finance.fin set ? = ? where ID = ? ;
это просто не сработает.