题
我使用的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”的数据库用户开始。
不隶属于 StackOverflow