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 注入的影响?我还有一个问题是上述查询的构建方式与我们是否按标准形成查询之间存在差异:

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 || %可能会被误用,即只输入一个字母并删除 a.name 列中任何位置包含该字母的所有记录

于 2015-07-12T14:18:17.053 回答