TomcatでHibernateを使用しています。私たちは最近、HibernateのコードにSQLインジェクション脆弱性を発見しました。具体的には、私たちがORMのために使用するPOJOの規制当局である。POJO経由でHibernateでSQLインジェクションを防ぐ方法
私たちは、ユーザの入力に取って、このような新しい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
}
私たちは、Tomcatのplatmformのさまざまな部分全体に様々な休息のサービスで使用されている。このような多くの多くのPOJOを持っています。私たちが何であるかの単なる一般的な例である上記
//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
:私たちが見つかった問題は、ユーザーが、我々はそれを作成し、それを保存するときに、彼らは、SQLインジェクションを行うことができますfooの値として、SQLクエリを設定することができるということです見て。
これまで私が見つけたのは、照会のデータをサニタイズするための例であり、ハイバネートを通しての挿入値ではありません。データベースに挿入する前にpojoのデータを消毒する方法はありますか?
hibernateは実際にそのSQLを実行しませんか? –
私は2番目にしたい:いくつかの奇妙なマッピングオプション(これまで聞いたことがない)がない限り、HibernateをSQLとしてフィールドの内容を実行することは不可能でなければならない!この結論にどうやって来ますか? – Robin