1

コードのセキュリティ上の欠陥を見つけるのに役立つFindBugプラグインと一緒に使用しています。Find Security Bugs一部のコードが SQL インジェクションに対して脆弱であるというフラグが立てられている理由がわかりません。

以下に 2 つの例を示します。

final StringBuilder queryString = new StringBuilder("SELECT users.login FROM Users users, Table table WHERE users.idUser = table.users.idUser");
Query query = session.createQuery(queryString.toString()); // This line is flagged


StringBuilder queryString = new StringBuilder("SELECT data FROM Table ");
queryString.append("WHERE table.idEntreprise = :id");
Query query = session.createQuery(queryString.toString()).setInteger("id", id); // This line is flagged

それは偽陽性ですか、それとも何かを見逃しましたか? 問題を正しく理解していれば、createQuery()andsetX()を使用するだけで十分ですか?

4

1 に答える 1

1

これは偽陽性です。名前付きクエリ パラメータは Hibernate によってエスケープされるため、SQL インジェクションは実行できません。

パラメータに外部入力を使用しないため、名前付きパラメータのない最初のクエリでも安全users.idUserです。

于 2013-04-26T09:40:42.723 に答える