带有 setParameter 的 ebean 查询

ebean query with setParameter

我有一个使用 Ebean Finder 对象的查询。这是一个工作版本:

public static Finder<Long, Device> find = new Finder<>(Long.class, Device.class);

.

public static Page<Device> find(int page, String sorting, String order) {

    return
            find.where()
                    .orderBy(sorting + " " + order)
                    .findPagingList(10)
                    .setFetchAhead(false)
                    .getPage(page);
}

但现在我想通过使用 setParameter 函数使其 SQL注入安全,我试过了,但没有成功。很高兴知道我有什么问题。

public static Page<Device> find(int page, String sorting, String order) {

    return
            find.where()
                    .orderBy(":sorting :order")
                    .setParameter("sorting", sorting)
                    .setParameter("order", order)
                    .findPagingList(10)
                    .setFetchAhead(false)
                    .getPage(page);

}

更新:

如前所述 here ,

"The problem is you can't use named parameters to set the ORDER in an HQL (or SQL) query."

如果为真,这会使我的代码容易受到 SQL 注入攻击!那么你的建议是什么?

我不知道 Ebean 有多安全,但您可以看到传递给 orderBy 的字符串已被解析:OrderBy.java

如果我这样写,例如:

find.where()
  .ilike("name", "%" + filter + "%")
  .orderBy("1;DROP TABLE company")
  .fetch("company")
  .findPagingList(pageSize)
  .setFetchAhead(false)
  .getPage(page);

我得到这个异常:

[RuntimeException: Expecting a max of 2 words in [[1;DROP, TABLE, company]] but got 3]