2017-04-07 7 views
1

これは疑わしい質問かもしれませんが、ドキュメントでは、条件付きクエリがパラメータ化されているか、またはフードの下で注入保護されていることを明示的に示していません。Java/Hibernate Criteria Query APIはインジェクションに対して保護されていますか?

言い換えれば、以下のような述語は注射攻撃に直接脆弱ですか?もしそうなら、私はそれをどのように修正するのですか?ドキュメントを見てみると、パラメータ化やそれに類するオプションはありません。

criteriaBuilder.like(
    root.get("prop"), 
    "%"+userInput+"%" 
) 
+0

パラメータ化されているかどうかは気になりますか?気になるのは、注射脆弱性があるかどうかです。 – immibis

+0

もちろん、十分です。私はちょうどそのように言いました。なぜなら、パラメータ化は注入に対する適切な防御を提供する一貫した方法の点で思い浮かぶ最初のことであり、APIの構造と一致します。しかし、あなたが正しいです、彼らの実装の詳細は結果に直接関連していないし、直接質問するのは理にかなっていません。私は私の質問に言い換えるつもりです。 –

+0

特に指定しない限り、*良い品質の*ライブラリはSQLインジェクション攻撃を許可していないと思います。ただし、これは*良質の*ライブラリにのみ適用されます。休止状態は私のように見えるが、私はそれを一度も使用していない。 – immibis

答えて

0

はい、Hibernateは基準について、パラメータ化クエリを使用している*

これを確認する最も簡単な方法は、(DEBUGへのorg.hibernate.SQLカテゴリを設定)、SQLログを活性化することである、あなたが表示されますhibernateによって生成されたクエリ(およびパラメータ値を取得するには、ログカテゴリ:org.hibernate.typeをTRACEレベルにアクティブにします)。

*基準では、手動でSQLセクションを書くことができます(Restrictions.sqlRestriction("...")を使用)。そこにSQLインジェクションが発生する可能性があるsqlを作成している場合は、条件クエリーもそれに従います。

0

はい、あります。

Criteria APIの使用は、パラメータ化されたPreparedStatementsの使用と同じです。慎重にする必要があるのは、クエリ文字列を連結しないか、本当に必要な場合は非常に慎重であることだけです。

関連する問題