Рассмотрим гипотетический случай, когда я должен получить некоторые детали из базы данных на основе userId и пример кода приведен ниже
private String getpassword(String username) {
PreparedStatement statement = null;
ResultSet resultSet = null;
Connection conn = null;
final String selectQuery = "SELECT password FROM " + "users WHERE username=?";
try {
conn = dataSource.getConnection();
statement = conn.prepareStatement(selectQuery);
statement.setString(1, username);
resultSet = statement.executeQuery();
if (resultSet.next()) {
}
} catch (SQLException e) {
// log it
}
//return
}
Это имя пользователя на самом деле идет с клиентской стороны и пользователь может подделать данные (если захочет). Так что подготовленныеStatements не будут принимать кавычки и посылать в БД только отфильтрованную форму SQL.
Например: я могу предоставить username= ' или 1=1, и это будет действительный оператор SQL. Но если драйвер обходит кавычки от пользовательских входов, то они будут препятствовать sql инъекциям.
Каково общее понимание этого же ?