的安全问题我开始学习JPA,并且我有大量的遗留EJB2.0代码需要重构才能使用新功能以及我将添加到代码库中的任何新功能。在我的代码中是否需要考虑新的攻击媒介,还是防御性编程会覆盖我?我需要留意的Java持久性API(JPA)
回答
JPA就像JDBC:后端技术。适用于JDBC的安全问题适用于JPA。因此,大多数安全考虑将在应用程序级别上实现,或由前端API处理。但事实上JPQL注入是一个你应该知道的明显的注入。
JPQL注:
使用SQL或JDBC API时一样,你永远不应该直接将参数添加到查询字符串。您应该使用Query对象上的setParameter(适用于特别和命名查询),或者可以使用JPA criteria API(尽管命名查询提供最佳性能)。
Query query = em.createQuery("DELETE Order WHERE customer = :customer");
query.setParameter("customer", customer);
query.executeUpdate();
数据库权限:
对于额外的安全性,你可以把多个持久单元(PU),因此任何安全漏洞的影响是有限的。例如,您可以创建具有不同数据库访问权限的多个PU:一个具有更新权限,另一个具有只读查询访问权限。只要意识到这样的决定会影响你的应用程序设计。
如果您是从一个不受信任的源接收的字节反序列化一个对象,那么它可以导致启动类路径上的任何类加载,无论是否公开,并导致该类初始化运行。它也可以通过具有副作用的构造函数和通过自定义反序列化方法获得权限。
如果你的类路径中包括众所周知的公开课与无限的权力,如Rhino解释附带最近的JVM,或者javax.tools接口javac的,和这种权力是通过序列化类的构造函数访问,那么攻击者可以使用它来执行任意的java代码。实际上,这意味着通过java.lang.Runtime
具有当前用户的特权的任意用户铃声代码。
第一个标准很容易满足。第二个可能不太容易满足。
不知道这是否与JPA有任何关系。 – Kdeveloper 2010-12-14 10:03:10
+1感谢您的意见,他们是有效的担忧。 – bakoyaro 2010-12-14 14:37:50
@Kdeveloper,我的印象是JPA实体需要可序列化。但你说得对;如果您的JPA实体没有使用java序列化进行持久化,那么我的帖子就无关紧要了。 – 2010-12-14 23:18:36
- 1. 持久性JPA
- 2. Java持久性(JPA)堆问题
- 3. JPA Java持久性API查询返回零结果
- 4. Java持久性API(JPA)和Java Transaction API之间有什么区别。 (JTA)
- 5. J2SE JPA持久性行为
- 6. JPA hibernate持久性pb
- 7. EJB-JPA持久性单元
- 8. Servlets中的Java持久性API
- 9. Docpad持久性需要说明
- 10. JPA多持久性持久性单元和JTA事务
- 11. Grails 3.1.5配置文件:rest-api不需要持久性
- 12. Oracle XML DB和Java持久性API
- 13. Neo4j - 架构,Java API和持久性
- 14. 使用哪个java持久性API?
- 15. 动态设置JPA持久性属性
- 16. AJAX/Java持久性
- 17. 使用多线程的JPA持久性
- 18. 学说2,需要执行代码前持久性/后持久性
- 19. JPA:持久数据同步,建议需要
- 20. 实现自动完成:Redis与Memcached,我需要持久性吗?
- 21. 我是否需要删除持久性登录Cookie?
- 22. java.util.prefs.Preferences的Java持久性
- 23. JPA与Java SE:javax.persistence.PersistenceException:没有持久性提供的EntityManager
- 24. JavaFX + Hibernate(JPA)持久性+ Derby DB
- 25. JPA可变持久性单元
- 26. Spring状态机JPA持久性
- 27. JPA一对多关系持久性Bug
- 28. JPA动态持久性单元名称
- 29. 单元测试JPA /持久性通用
- 30. JPA 2持久性上下文规范
你是否在你的应用层创建PreparedStatements?使用它们(AFAIK)是防止SQL注入的主要防御措施,通常在数据层创建。 – bakoyaro 2010-12-13 18:22:37
好点。如果最佳实践成为习惯,你有时会忘记不好的选择。我将它添加到我的答案中。 – Kdeveloper 2010-12-13 23:59:40
每当你开发一个纯文本协议,俄罗斯黑客利用你的类型安全缺乏。 – 2010-12-14 01:14:08