JPA를 배우기 시작했습니다. 사용하기 위해 리팩토링해야하는 상당량의 기존 EJB2.0 코드가 있습니다. 새로운 기능 및 코드 기반에 추가 할 새로운 기능을 제공합니다. 내 코드에서 설명해야 할 새로운 공격 경로가 있습니까? 아니면 방어 프로그래밍이 나를 커버합니까?Java Persistence API (JPA)에서주의해야 할 보안 문제는 무엇입니까
답변
JPA는 JDBC와 같습니다. 백엔드 기술입니다. JDBC에 적용되는 것과 동일한 보안 문제가 JPA에 적용됩니다. 따라서 대부분의 보안 고려 사항은 응용 프로그램 수준에서 구현되거나 프런트 엔드 API에서 처리됩니다. 그러나 실제로 JPQL 주입은 당신이 알고 있어야하는 명백한 것입니다.
JPQL 주입 : SQL 또는 JDBC API를 사용하는 경우
그냥 좋아, 당신은 직접 쿼리 문자열에 매개 변수를 추가해서는 안됩니다. Query 개체의 setParameter (adhoc 쿼리와 명명 된 쿼리 모두에 적용) 또는 JPA criteria API (명명 된 쿼리가 최상의 성능을 제공하지만)을 사용할 수 있습니다.
Query query = em.createQuery("DELETE Order WHERE customer = :customer");
query.setParameter("customer", customer);
query.executeUpdate();
데이터베이스 권한 :
추가 보안을 위해, 당신이 만들 수있는 여러 지속적 유닛 (PU) 그래서 모든 보안 위반의 영향이 제한됩니다. 예를 들어 데이터베이스 액세스 권한이 다른 여러 PU를 만들 수 있습니다. 하나는 업데이트 권한이 있고 다른 하나는 읽기 전용 쿼리 액세스 권한입니다. 이와 같은 결정이 응용 프로그램 설계에 영향을 미친다는 것을 알기 만하면됩니다.
신뢰할 수없는 출처에서받은 바이트에서 객체를 비 직렬화하는 경우 부트 클래스 경로에있는 모든 클래스가 public인지 여부에 관계없이로드되어 해당 클래스 초기화가 실행될 수 있습니다. 부작용이있는 생성자와 사용자 정의 직렬화 방법을 통해 권한을 얻을 수도 있습니다. 클래스 패스가 아니라 기관이 직렬화 가능 클래스의 생성자를 통해 연결할 수있는 가장 최근의 JVM과 함께 제공되는 코뿔소 인터프리터, 또는 javac의, 및에 javax.tools 인터페이스처럼 무제한의 권한과 함께 public 클래스 알려진이 포함 된 경우
, 공격자는이를 사용하여 임의의 Java 코드를 실행할 수 있습니다. 실제로 이것은 java.lang.Runtime
을 통해 현재 사용자의 권한을 가진 임의의 사용자 - 링 코드를 의미합니다.
첫 번째 기준은 쉽게 충족됩니다. 두 번째 것은 아마도 쉽게 만날 수 없을 것입니다.
JPA와 관련이 있는지 확실하지 않습니다. – Kdeveloper
+1 귀하의 의견을 보내 주셔서 감사합니다. – bakoyaro
@Kdeveloper, 나는 JPA 엔티티가 직렬화 될 필요가 있다는 인상하에있었습니다. 그러나 당신 말이 맞습니다. JPA 엔티티가 지속성을 위해 자바 직렬화를 사용하지 않는다면 내 게시물은 부적절합니다. –
- 1. Java Persistence API
- 2. JSF의 보안 문제는 무엇입니까?
- 3. Java Persistence Issue
- 4. Java Persistence (JPA) 힙 문제
- 5. Java Persistence 용 JPA 또는 Hibernate?
- 6. Blackberry Persistence Store의 보안 수준은 어느 정도입니까?
- 7. URL에 세션 토큰을 보내는 보안 문제는 무엇입니까?
- 8. 사용자 코드 평가의 보안 문제는 무엇입니까?
- 9. SSO 구현시 발생할 수있는 보안 문제는 무엇입니까?
- 10. Java Persistence : Query.getResultList()의 결과로 무언가를 던지겠습니까?
- 11. MS Access로 Java Persistence API를 사용하는 방법은 무엇입니까?
- 12. 웹 보안 문제는 여기에서 찾을 수 있습니까?
- 13. API 인증의 보안
- 14. 웹 API 보안
- 15. RESTful API 보안
- 16. 보안 토큰 문제는 응용 프로그램을 구축 할 때
- 17. RoR : 폐쇄 API 보안
- 18. Java의 보안 API AuthSub (Google 캘린더 API)
- 19. WCF 웹 API 보안
- 20. API 키 및 보안
- 21. MHTML (.mht) 파일의 보안/개인 정보 보호 문제는 무엇입니까?
- 22. Java 보안 아키텍처
- 23. DB (Java Persistence API)에 전자 메일이 이미 있는지 확인하기 위해 쿼리가 필요합니다.
- 24. NativeProcess API Java 디버깅?
- 25. Java EE/Java 브라우저 보안
- 26. Matlab/Java API 콜백
- 27. 플래시 보안 오류 - Twitter API
- 28. 작업 대기열 Java API
- 29. Java EE 보안 - 사용할 메소드는 무엇입니까?
- 30. 보안 단일 앱 API 빌드
앱 계층에 PreparedStatement를 만드시겠습니까? 그것들 (AFAIK)을 사용하는 것은 SQL 주입에 대한 주요 방어이며 일반적으로 데이터 계층에서 생성됩니다. – bakoyaro
좋은 지적. 모범 사례가 습관이되면 가끔 나쁜 대안을 잊어 버리는 경우가 있습니다. 나는 그것을 내 대답에 덧붙였다. – Kdeveloper
일반 텍스트 프로토콜을 개발할 때마다 러시아 해커는 유형 안전성의 부족을 악용합니다. 편집을 위해 –