【发布时间】:2017-03-14 15:26:42
【问题描述】:
我们在 Tomcat 上使用 Hibernate。我们最近在我们的 Hibernate 代码中发现了一个 SQL 注入漏洞。特别是对我们用于 ORM 的 POJO 的保护。
我们正在接受用户输入并像这样创建一个新的 POJO:
//POJO associated with Foo.hib.xml
public class Foo{
private String a;
private String b;
public Foo(String a, String b){
this.a=a;
this.b=b;
}
//Getters go here
}
我们有很多这样的 pojo,用于我们的 tomcat 平台各个部分的各种休息服务。我们发现的问题是用户可以将一个sql查询设置为Foo的值,所以当我们创建它并保存它时,他们可以进行sql注入:
//example of possible injection
Foo foo = new Foo("select * from *;", "insert * into * as *");
//save new Foo to hibernate
session.saveOrUpdate(foo); //above queries will be executed on insert
以上只是我们所看到的一般示例。
我已经查看了所有内容,到目前为止,我发现的只是清理查询数据而不是通过休眠插入值的示例。有没有办法通过休眠让它在将 pojo 的数据插入数据库之前对其进行清理?
【问题讨论】:
-
hibernate 实际上并没有执行那个 SQL,不是吗?
-
我想补充一点:除非有一些奇怪的映射选项(我从未听说过),否则应该不可能让 Hibernate 执行字段的内容为SQL!你是怎么得出这个结论的?
标签: java sql-server spring hibernate tomcat