Будут ли подготовленные операторы предотвращать атаки sql инъекций?

Рассмотрим гипотетический случай, когда я должен получить некоторые детали из базы данных на основе 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 инъекциям.

Каково общее понимание этого же ?

5
задан Heisenbug 19 August 2011 в 11:07
поделиться