1

たとえば。私は持っている:

Input:
ArrayList<Integer> idlist
String nameText

    String q = "DELETE FROM myTable AS a WHERE a.name LIKE '%' || :name || '%' OR a.id IN (:idlist)";

    Query query = entityManager.createQuery(q);
    query.setParameter("name", nameText);
    query.setParameter("idlist", idlist);

query.executeUpdate();

上記のコード スニペットは、SQL インジェクションの影響を受けやすいでしょうか? もう 1 つ質問があります。上記のクエリを作成する方法と、条件によってクエリを作成する方法との間に違いがあります。

CriteriaBuilder cb = em.getCriteriaBuilder();

  CriteriaQuery<Country> q = cb.createQuery(Country.class);
  Root<Country> c = q.from(Country.class);
  q.select(c);

それぞれに利点はありますか?

4

2 に答える 2

2

いいえ、そうではありません。これが、パラメーター化されたクエリの要点です。

于 2012-07-24T07:44:09.167 に答える
0

準備済みステートメントで SQL インジェクションが発生する可能性はありません。

しかし、パラメーターの値がユーザーによって入力された場合、LIKE % || :name || %1 文字だけを入力し、a.name 列の任意の場所にその文字を含むすべてのレコードを削除することによって、式が誤用される可能性があります。

于 2015-07-12T14:18:17.053 に答える