我使用的Java EE 6和JSF的2.0构建Java Web应用程序,使用持久化API的所有数据库操作。

后端是MySQL,但是我已经使用了EntityManager功能和命名在EJB-QL查询的所有操作。是SQL注入攻击可能在这种情况下?

有帮助吗?

解决方案

这是唯一可能的,如果你是内联用户控制变量在SQL / JPQL字符串,像这样:

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

如果你不这样做,并使用参数/命名查询而已,那么你是安全的。

其他提示

是,它是可能的。这取决于你执行的方式。结果 看看在JPA查询语言的预防注射。

如果你的JPA提供处理所有的输入参数来处理注入攻击,那么你应该覆盖。我们在做的EclipseLink薄。

由于以前的海报提到拼凑自己的JPQL或SQL(本机查询)可能暴露你。

我会建议使用带有参数的命名查询在连接字符串建立JPQL / SQL。

道格

在的情况下你从进攻/实用透视询问,如果JPQL语句从用户输入构造,请考虑以下用户输入:

blah') AND FUNCTION('user like chr(65)||chr(37) AND 42 - ', 1) > 40 AND ('42'='42

如果受害人使用JPA实现> = 2.1,和后端数据库是Oracle,像上面可以作为一个布尔SQL注入告诉你的行为,如果用“A”的数据库用户开始。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top