Подтвердить что ты не робот

Предоставляет ли подготовленноеStatement SQL-инъекцию?

Я прочитал и попытался применить уязвимые sql-запросы к моему приложению. Это недостаточно безопасно. Я просто использую Connection Statement для проверки базы данных и других операций вставки.

Безопасны ли подготовленные состояния? и, кроме того, будет ли проблема с этим утверждением тоже?

4b9b3361

Ответ 1

Использование конкатенации строк для построения вашего запроса с произвольного ввода не сделает PreparedStatement безопасным. Взгляните на этот пример:

preparedStatement = "SELECT * FROM users WHERE name = '" + userName + "';";

Если кто-то ставит

' or '1'='1

как userName, ваш PreparedStatement будет уязвим для SQL-инъекции, поскольку этот запрос будет выполнен в базе данных как

SELECT * FROM users WHERE name = '' OR '1'='1';

Итак, если вы используете

preparedStatement = "SELECT * FROM users WHERE name = ?";
preparedStatement.setString(1, userName);

вы будете в безопасности.

Некоторые из этого кода взяты из этой статьи в Википедии.

Ответ 2

Подготовленный оператор, если он используется правильно, защищает от SQL-инъекции. Но, пожалуйста, отправьте пример кода на свой вопрос, чтобы мы могли правильно его использовать.

Ответ 3

Ну, просто используя PreparedStatement не делает вас безопасным. Вы должны использовать параметры в своем запросе SQL, который возможен с помощью PreparedStatement. Посмотрите здесь для получения дополнительной информации.

Ответ 4

Как объяснено в этот пост, только PreparedStatement не поможет вам, если вы все еще конкатенируете строки.

Например, один из злоумышленников-злоумышленников может сделать следующее:

  • вызовите функцию ожидания, чтобы все соединения с базой данных были заняты, поэтому ваше приложение недоступно
  • извлечение конфиденциальных данных из базы данных
  • минуя аутентификацию пользователя

И это не просто SQL, на который может повлиять b. Даже JPQL может быть скомпрометирован, если вы не используете параметры привязки.

В нижней строке вы никогда не должны использовать конкатенацию строк при построении операторов SQL. Для этого используйте специальный API: