Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA中是否可能存在SQL注入攻击?_Jpa_Orm_Sql Injection_Jpql - Fatal编程技术网

JPA中是否可能存在SQL注入攻击?

JPA中是否可能存在SQL注入攻击?,jpa,orm,sql-injection,jpql,Jpa,Orm,Sql Injection,Jpql,我正在使用JavaEE6和JSF-2.0构建一个JavaWeb应用程序,对所有数据库操作使用持久性API 后端是MySQL,但我在EJB-QL中为所有操作使用了EntityManager函数和命名查询。在这种情况下可能发生SQL注入攻击吗?是的,可能发生。这取决于您的实施方式。 看一看 只有在SQL/JPQL字符串中内联用户控制的变量时,才可能这样做: String sql = "SELECT u FROM User u WHERE id=" + id; 如果您不这样做,并且只使用参数化/命名

我正在使用JavaEE6和JSF-2.0构建一个JavaWeb应用程序,对所有数据库操作使用持久性API


后端是MySQL,但我在EJB-QL中为所有操作使用了EntityManager函数和命名查询。在这种情况下可能发生SQL注入攻击吗?

是的,可能发生。这取决于您的实施方式。

看一看

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

String sql = "SELECT u FROM User u WHERE id=" + id;

如果您不这样做,并且只使用参数化/命名查询,那么您是安全的。

如果您的JPA提供程序处理所有输入参数以处理注入攻击,那么您应该受到保护。我们在日食中做得很薄

正如前面的海报所提到的,拼接您自己的JPQL或SQL(用于本机查询)可能会暴露您的问题

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


道格

< P>如果你从攻势/实际的角度询问,如果JPQL语句是由用户输入构建的,请考虑下面的用户输入:

blah')和函数('user like chr(65)| | chr(37)和42-',1)>40和('42'='42


如果受害者使用的是JPA实现>=2.1,并且后端数据库是Oracle,则类似于上面的内容可能会充当布尔SQL注入,告诉您数据库用户是否以“a”开头。

我建议您也查看一下SAN文章,它有更多示例/介绍:如果使用
em.persist(user);
其中
user
由,err,user填充?这意味着下面的查询是SQL注入证明吗?@query(“SELECT*from table where id=:userID”)user getUser(@Param(“userID”)String userID)