質問

私は、すべてのデータベース操作のための永続性APIを使用して、JavaのEE 6とJSF-2.0を使用してJava Webアプリケーションを構築しています。

は、バックエンドはMySQLのですが、私はEntityManagerの機能を使用し、すべての操作のためのEJB-QLで名前付き問合せいます。 SQLインジェクション攻撃は、この場合には可能か?

役に立ちましたか?

解決

:あなたがそうのようなSQL / JPQL文字列にユーザ制御変数をインライン化している場合は、

これはのみ可能です

String sql = "SELECT u FROM User u WHERE id=" + id;

あなたがしてパラメータを使用していることを行っていない場合は/名前付きクエリのみ、あなたしている安全ます。

他のヒント

はい、それは可能です。それはあなたが実装方法に依存します。
JPAのクエリ言語の中に注入防止を見ています。

あなたのJPAプロバイダがハンドルインジェクション攻撃へのすべての入力引数を処理した場合、あなたがカバーされるべきです。私たちは、EclipseLinkの薄い行います。

前のポスターは一緒に(ネイティブクエリの)独自のJPQLまたはSQLを縫い合わせ述べたように、あなたを公開することができます。

私はJPQL / SQLを構築するために文字列を連結上のパラメータを持つ名前付きクエリを使用することをお勧めします。

ダグ

JPQL文がユーザー入力から構成されている場合、場合はあなたが考える、攻撃的/実践的な観点から、以下のユーザの入力を求めている。

blah') AND FUNCTION('user like chr(65)||chr(37) AND 42 - ', 1) > 40 AND ('42'='42

被害者はJPAの実装> = 2.1を使用して、バックエンドデータベースは、Oracle、あなたを伝えるためにブールSQLインジェクションとして働くことができる上記のようなものである場合であれば「A」を持つデータベースユーザーが始まります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top