JPA就像JDBC:后端技术.适用于JDBC的相同安全问题适用于JPA.因此,大多数安全性考虑将在应用程序级别实现或由前端API处理.但事实上,JPQL注入是一个你应该注意的明显问题.
JPQL注入:
就像使用SQL或JDBC API一样,您不应该直接将参数添加到查询字符串中.你应该用在工作的setParameter 查询对象(适用于即席和命名查询),或者你可以使用JPA 标准API(虽然命名查询提供最佳的性能).
Query query = em.createQuery("DELETE Order WHERE customer = :customer");
query.setParameter("customer", customer);
query.executeUpdate();
Run Code Online (Sandbox Code Playgroud)
数据库权利:
为了提高安全性,您可以创建多个持久性单元(PU),因此任何安全漏洞的影响都是有限的.例如,您可以创建具有不同数据库访问权限的多个PU:一个具有更新权限,另一个具有只读查询访问权限.只要意识到这样的决定会影响您的应用程序设计.