JDBI @bind和bind方法是否没有SQL注入?

时间:2017-01-23 16:45:02

标签: java sql sql-injection jdbi

我已经使用一些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())

1 个答案:

答案 0 :(得分:4)

您的两个示例都在内部使用JDBI参数绑定机制,最终归结为标准JDBC PreparedStatement setXxx()系列方法。 您可以通过将JDBI源代码从bind方法跟踪到StringArgument或类似的类来确认自己,其中为每种类型实现SQL查询参数绑定。 因此,使用JDBI bind比使用PreparedStatement / setString / setInt方法使用普通JDBC setXxx并不危险。