首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JPQL注入和SQL注入有什么不同?

JPQL注入和SQL注入有什么不同?
EN

Stack Overflow用户
提问于 2019-02-09 16:07:40
回答 1查看 704关注 0票数 1

我读过关于JPQL注入和SQL注入的文章。在许多站点中,从测试人员的角度来看,ORM注入几乎与SQL注入相同。因此,基本上我想知道的是JPQL和SQL注入之间的主要区别。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-10 17:23:07

JPQL注入和SQL注入都是更广泛的代码注入类别的例子。

在运行时解析的任何语言都容易受到代码注入的影响。

JPQL或Java持久化查询语言在语法上与SQL相似,而且它是作为字符串编写的,并在运行时被解析。

如上面所示,通过将JPQL查询字符串直接传递给createQuery方法来构建查询,在JPA中称为动态查询构造,因为查询字符串可以在运行时动态构建。

当描述说“在运行时动态构建”时,它们意味着您的代码将JPQL查询格式化为Java字符串,然后提交要解析和执行的字符串。因此,您的代码有机会将固定字符串与变量内容组合起来。

下面是一个安全使用参数将变量与JPQL语句组合在一起的示例。这来自于https://www.objectdb.com/java/jpa/query/parameter

保险箱:

代码语言:javascript
运行
复制
TypedQuery<Country> query = em.createQuery(
    "SELECT c FROM Country c WHERE c.name = :name", Country.class);
return query.setParameter("name", name).getSingleResult();

下面是以不安全方式编写的相同查询,将变量直接组合到字符串中。

不安全:

代码语言:javascript
运行
复制
TypedQuery<Country> query = em.createQuery(
    "SELECT c FROM Country c WHERE c.name = '" + name + "'", Country.class);

如果可以避免,不要使用字符串连接来形成JPQL查询。这就是不安全的内容如何潜入您的JPQL。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54608013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档