例如。我有:
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);
一个人有什么优势吗?
答案 0 :(得分:2)
答案 1 :(得分:0)
使用预准备语句进行SQL注入是不可能的。
但是如果用户输入参数的值,则只能输入一个字母并删除a.name列中任何位置包含该字母的所有记录,可能会误用表达式Class<T>