2011-12-12 12 views
8

Tôi tự hỏi làm thế nào Spring MVC xử lý tiêm SQL (và các vấn đề an ninh khác: XSS, mã [javascript] tiêm, vv). Tôi đang nói chủ yếu về thoát các giá trị được thêm vào DB và như vậy. Tôi dường như không thể tìm thấy bất kỳ câu trả lời nào bởi vì mỗi khi tôi tìm kiếm kết quả tiêm sql mùa xuân liên quan đến việc tiêm phụ thuộc phát sinh.Spring (MVC) SQL injection avoidance?

Luồng của tôi như sau: từ trình duyệt máy khách, tôi đưa ra yêu cầu bao gồm JSON với một số tham số truy vấn (không phải câu lệnh SQL, quá ngu ngốc - để tạo truy vấn SQL trong JS). Khi yêu cầu đạt đến phương thức được chú thích đúng trong Bộ điều khiển, yêu cầu được ánh xạ qua @RequestBody bằng cách sử dụng Jackson tới một "đối tượng yêu cầu". Bây giờ đối tượng này được gửi đến DAO, nơi sử dụng JDBC Template tôi truy vấn db (và sử dụng RowMapper tôi ánh xạ kết quả).

Trong DAO Tôi có một cái gì đó như:

public int countAll(RequestObject request) { 
    String sql = "SELECT count(*) FROM employees WHERE name = '" + request.getName() + "'"; 

    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); 
    int count = jdbcTemplate.queryForInt(sql); 

    return count; 
} 

Bây giờ là phương pháp này an toàn từ SQL injection? Các truy vấn dựa trên không phải JDBCTemplate có an toàn khi được truyền qua Spring MVC không?

Chúng ta có thể thảo luận một chút về vấn đề này không?

Trả lời

15

Bất cứ lúc nào bạn xây dựng một truy vấn bằng cách nối bạn vunerlable để tấn công tiêm

vượt qua các thông số của bạn một cách chính xác:

jdbcTemplate.queryForInt(sql, args, argTypes) 

ví dụ:

 JdbcTemplate insert = new JdbcTemplate(dataSource); 
    insert.update("INSERT INTO PERSON (FIRSTNAME, LASTNAME) VALUES(?,?)", 
      new Object[] { firstName, lastName }); 
+0

Vâng, thực sự đó là một chút rõ ràng với tôi . Câu hỏi đặt ra là ... trong những trường hợp như tôi đã giải thích ở trên, mùa xuân thoát khỏi bất cứ điều gì hay không? Bây giờ, suy nghĩ lại, tôi nghĩ rằng nó không, nhưng chỉ để chắc chắn tôi muốn hỏi. – BogdanSorlea

+2

Và bạn chưa thực hiện nó. Mùa xuân sẽ không thoát khỏi bất cứ điều gì. Dựa trên thông tin bạn đã đưa ra ở trên là vấn đề duy nhất của bạn. – Mick

+1

Và câu hỏi này không chỉ liên quan đến mùa xuân hoặc java. Hoàn toàn chấp nhận câu trả lời này. – Mukus