2012-01-30 25 views
16

Để lấy một số dữ liệu tôi đang tạo một truy vấn sql :)
Tất nhiên có một số phần lọc và đặt hàng.ngăn chặn tiêm sql trong oracle "order by" part

Để có được kết quả tôi sử dụng "NamedParameterJdbcTemplate" và khi tôi cần thêm thứ gì đó vào phần "ở đâu", tôi sử dụng bản đồ tham số, để tránh tiêm.

Nhưng khác với phần "đặt hàng", vì không có thoát tự động (và đó là một phần của sql). Phần thứ tự này đôi khi được lấp đầy với dữ liệu từ người dùng (trực tiếp), đôi khi đặt một số thông số sắp xếp bổ sung từ mã bên trong. Có một vấn đề: đôi khi trường sắp xếp này không chỉ chứa tên cột, mà còn có câu lệnh sql. Bây giờ mỗi thông số để sắp xếp được thoát bằng tay bằng cách thay thế một số ký tự (như ') thành chuỗi rỗng, nhưng một số thông số chúng tôi đặt cho mã của chúng tôi hơi phức tạp để chuyển quy tắc này.

Cách tốt nhất để ngăn chặn tiêm sql trong phần sắp xếp truy vấn là gì, khi bạn sử dụng mẫu jdbc?

+9

+1 để được chăm sóc :) – RedFilter

+1

Có thể sử dụng 'PreparedStatement'? – Romain

+0

Tôi không biết về jdbc nhưng có thể sử dụng một biến liên kết trong một 'thứ tự bởi' trong Oracle. – Ben

Trả lời

7

Để giúp bảo vệ chống lại SQL injection ở phía bên cơ sở dữ liệu, có một cái nhìn tại DBMS_ASSERT built-in Oracle gói: http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_assert.htm

Bạn có thể tìm ra SIMPLE_SQL_NAME chức năng sẽ giúp bảo vệ chống lại SQL Injection cho khoản ORDER BY của bạn.

Hy vọng điều này sẽ giúp ...

+0

Đó có thể là tốt hơn sau đó sử dụng chức năng thoát tùy chỉnh. Nếu không có cách nào để làm điều đó với một số thư viện (jdbctemplate hoặc somthing tương tự), có lẽ sẽ làm điều này. – Dainius

1

Một cách tôi đã sử dụng dù vì lý do hơi khác là sử dụng Sắp xếp theo 3,2 (cột 3, cột thứ hai)

Vì vậy, nếu bạn có thể tìm ra tên cột nhập vào bởi vị trí người dùng trong cột của đầu ra, indirection nên giết vector tiêm.

+0

vấn đề đôi khi trường sắp xếp này không chỉ chứa tên cột, nhưng một câu lệnh sql – Dainius

+0

Một người dùng đã nhập câu lệnh sql? –

+0

Không trực tiếp, một số liên kết có tham số được chuyển tới phần "đặt hàng". Dự đoán đầu tiên để khắc phục là tạo bản đồ các trường sắp xếp được phép và nhận trường đó theo thông số cho url, dưới dạng khóa, tương tự (hoặc tương tự) những gì Vincent đã đề xuất. Nhưng cũng có một số mã cũ, mà tôi không muốn sửa đổi (ai biết nó sẽ tồn tại bao lâu), và có một số sql. Và có thể có một số nơi khác mà thông số thứ tự này được sử dụng. – Dainius

2

Bạn có thể giới hạn lựa chọn thứ tự sắp xếp. Hầu hết các ứng dụng chỉ cho phép người dùng sắp xếp theo một cột được hiển thị, người dùng có thể chọn cột nào để sắp xếp thông qua vị trí cột của nó.

Trong trường hợp này, bạn sẽ chỉ chấp nhận số nguyên từ người dùng (bạn có thể chấp nhận số âm để sắp xếp theo thứ tự giảm dần). Bạn có thể cho phép người dùng sắp xếp theo một số cột bằng cách chấp nhận danh sách các số nguyên.

Số nguyên dễ kiểm tra và điều này sẽ không để lộ tên cột bên dưới cho người dùng.