2017-01-23 7 views
1

Я протестировал аннотацию @bind с помощью некоторых попыток SQL-инъекций и кажется, что вход дезинфицирован. Для метода bind я не уверен, верно ли это.Являются ли JDBI @bind и метод привязки свободными от SQL Injection?

Может ли кто-нибудь подтвердить, правильно ли я догадываюсь с некоторой ссылкой? Я не могу найти ничего из документации. Благодарю.

Ниже приведены примеры использования аннотации привязки.

@SqlQuery("SELECT count(*)\n" + 
     "FROM member_preference_value WHERE member_id = :memberId and preference_id=:preferenceId") 
int hasUserSetPreference(@Bind("preferenceId") Integer preferenceId,@Bind("memberId") String memberId) throws Exception; 

Ниже приведен пример использования метода связывания.

Update update = handle.createStatement(sqlQuery) 
         .bind("bookmark_id", savedSearch.getBookmarkId()) 

ответ

1

Оба ваших примеров внутренне с использованием параметров JDBI механизм, который в конечном счете сводится к стандартному JDBC PreparedStatement setXxx() семейство методов связывания. Вы можете подтвердить это самостоятельно, отслеживая исходный код JDBI от bind до StringArgument или аналогичных классов, где привязка параметров запроса SQL реализована для каждого типа. Таким образом, не стоит использовать JDBI bind, чем использовать обычный JDBC PreparedStatement с setString//setXxx методов.