2010-08-09 34 views
33

Tôi đang xây dựng một Ứng dụng web Java bằng cách sử dụng Java EE 6 và JSF-2.0, sử dụng API kiên trì cho tất cả các hoạt động cơ sở dữ liệu.Các cuộc tấn công SQL injection có thể xảy ra trong JPA không?

Back-end là MySQL, nhưng tôi đã sử dụng các hàm EntityManager và Truy vấn được đặt tên trong EJB-QL cho tất cả các hoạt động. Các tấn công SQL injection có thể xảy ra trong trường hợp này không?

Trả lời

31

Nó chỉ có thể nếu bạn đang nội tuyến biến do người dùng kiểm soát trong một SQL/JPQL chuỗi như vậy:

String sql = "SELECT u FROM User u WHERE id=" + id; 

Nếu bạn không làm điều đó và đang sử dụng tham số/tên truy vấn mà thôi, sau đó bạn an toàn.

+4

Nếu sử dụng 'em.persist (user);' nơi 'user' được điền bởi, err, user? –

+0

Câu trả lời cho điều đó sẽ là ... – user435421

11

Có, điều đó là có thể. Nó phụ thuộc vào cách bạn thực hiện.
Hãy xem Preventing injection in JPA query language.

+0

+1 Liên kết rất thú vị. Cảm ơn. – Akshay

+1

Tôi cũng khuyên bạn nên kiểm tra bài viết SANS, nó có nhiều mẫu/giới thiệu hơn: http://software-security.sans.org/developer-how-to/fix-sql-injection-in-java-persistence- api-jpa – eckes

5

Nếu nhà cung cấp JPA của bạn xử lý tất cả các đối số đầu vào để xử lý các cuộc tấn công tiêm thì bạn sẽ được bảo vệ. Chúng tôi làm mỏng trong EclipseLink.

Khi áp phích trước đề cập đến việc ghép nối với nhau JPQL hoặc SQL của riêng bạn (đối với các truy vấn gốc) có thể làm lộ bạn.

Tôi khuyên bạn nên sử dụng truy vấn được đặt tên có tham số qua chuỗi nối để xây dựng JPQL/SQL.

Doug

Các vấn đề liên quan