2017-01-23 54 views
1

我已經通過一些SQL注入嘗試來測試@bind註解,並且似乎輸入已被消毒。對於綁定方法,我不確定它是否也是如此。JDBI @綁定和綁定方法是否免受SQL注入?

有人可以確認我的猜測是否正確與一些參考?我無法從文檔中找到任何內容。謝謝。

以下是使用綁定註釋的示例。

@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 PreparedStatementsetString/setInt/setXxx方法更安全。