JPA中是否可能存在SQL注入攻击?
我正在使用JavaEE6和JSF-2.0构建一个JavaWeb应用程序,对所有数据库操作使用持久性APIJPA中是否可能存在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; 如果您不这样做,并且只使用参数化/命名
后端是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)