在JPA中是否可以进行SQL注入攻击?

Aks*_*hay 40 orm jpa sql-injection jpql

我正在使用Java EE 6和JSF-2.0构建Java Web应用程序,使用持久性API进行所有数据库操作.

后端是MySQL,但是我在EJB-QL中使用了EntityManager函数和命名查询来进行所有操作.在这种情况下,SQL注入攻击是否可行?

Bal*_*usC 42

只有当你在SQL/JPQL字符串中内联用户控制的变量时才有可能:

String sql = "SELECT u FROM User u WHERE id=" + id;
Run Code Online (Sandbox Code Playgroud)

如果您没有这样做并且仅使用参数化/命名查询,那么您就是安全的.

  • 如果使用`em.persist(user);`其中`user`被错误的用户填充? (4认同)
  • 这是否意味着以下查询是 SQL 注入证明?@Query("SELECT * from table where id = :userID") User getUser (@Param("userID") String userID ) (2认同)

Jig*_*shi 11

对的,这是可能的.这取决于您实施的方式.
看看在JPA查询语言防止注入.


Dou*_*rke 5

如果您的JPA提供程序处理所有输入参数以处理注入攻击,那么您应该被覆盖.我们在EclipseLink中做得很好.

正如之前的海报提到的拼凑你自己的JPQL或SQL(对于本机查询)可能会暴露你.

我建议使用带有参数的命名查询而不是连接字符串来构建JPQL/SQL.

道格