我已经使用一些SQL注入尝试测试了@bind注释,并且似乎已对输入进行了清理。对于绑定方法,我不确定它是否也是正确的。
有人可以通过参考确认我的猜测是否正确吗?我在文档中找不到任何内容。感谢。
以下是使用绑定注释的示例。
@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;
以下是使用bind方法的示例。
Update update = handle.createStatement(sqlQuery)
.bind("bookmark_id", savedSearch.getBookmarkId())
答案 0 :(得分:4)
您的两个示例都在内部使用JDBI参数绑定机制,最终归结为标准JDBC PreparedStatement setXxx()
系列方法。
您可以通过将JDBI源代码从bind方法跟踪到StringArgument或类似的类来确认自己,其中为每种类型实现SQL查询参数绑定。
因此,使用JDBI bind
比使用PreparedStatement
/ setString
/ setInt
方法使用普通JDBC setXxx
并不危险。