Я не знаю о setString()
, но если оно совпадает с setParameter()
, тогда да, этого достаточно, чтобы предотвратить инъекцию sql.
Обновление
Экранирование данных означает, что вы должны убедиться, что вы не храните опасные значения в базе данных.
Быстрый пример, например, если вы передаете аргумент
String name = "<script>alert('Hello');</script>";
//insert this name into Mother, and then when you load it from the database, it will be displayed
List mothers = session.createQuery(
"select mother from Cat as cat join cat.mother as mother where cat.name = ?")
.setString(0, name)
.list();
к вашему запросу, затем в следующий раз, когда вы загрузите его из базы данных и отобразите его в веб-браузере, он запустит скрипт.Вы должны убедиться, что ваш фреймворк экранирует все недопустимые символы, например: измените <
на <
перед тем, как вставить его в базу данных.Если ваш фреймворк не делает этого, вы должны сделать это вручную.Есть множество библиотек, которые правильно экранируют код для вас.Взгляните, например, на этот вопрос и ответы на него.