的安全問題我開始學習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