使用Java Persistence API(JPA)需要注意哪些安全问题

bak*_*aro 5 java security jpa java-ee

我开始学习JPA,并且我有大量遗留的EJB2.0代码需要重构才能使用新功能,以及我将添加到代码库的任何新功能.是否有我需要在我的代码中考虑的新攻击向量,或者防御性编程会覆盖我吗?

Kde*_*per 6

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:一个具有更新权限,另一个具有只读查询访问权限.只要意识到这样的决定会影响您的应用程序设计.