带有 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]
我有一个使用 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]