Hãy xem xét một tình huống giả định mà tôi phải lấy một số chi tiết từ cơ sở dữ liệu dựa trên userId và mã mẫu được đưa ra dưới đâyBáo cáo chuẩn bị sẵn sàng ngăn chặn các cuộc tấn công tiêm sql?
private String getpassword(String username) {
PreparedStatement statement = null;
ResultSet resultSet = null;
Connection conn = null;
final String selectQuery = "SELECT password FROM " + "users WHERE username=?";
try {
conn = dataSource.getConnection();
statement = conn.prepareStatement(selectQuery);
statement.setString(1, username);
resultSet = statement.executeQuery();
if (resultSet.next()) {
}
} catch (SQLException e) {
// log it
}
//return
}
Tên người dùng này thực sự đến từ phía khách hàng và người dùng có thể làm xáo trộn các dữ liệu (nếu anh ta muốn). Vì vậy, sẽ chuẩn bịBáo cáo ngăn chặn từ việc chấp nhận báo giá và chỉ gửi các hình thức lọc của SQL vào cơ sở dữ liệu.
Ví dụ: Tôi có thể cung cấp tên người dùng = 'hoặc 1 = 1 và nó sẽ là một câu lệnh SQL hợp lệ. Nhưng nếu người lái xe thoát khỏi dấu ngoặc kép từ đầu vào của người dùng, thì họ sẽ ngăn chặn việc tiêm sql.
Hiểu biết chung về điều gì?
xin lỗi vì câu trả lời sai trước đây của tôi (loại bỏ). Có vẻ họ làm việc. xem bài đăng này: http://stackoverflow.com/questions/1812891/java-escape-string-to-prevent-sql-injection – Heisenbug
Ngăn chặn việc tiêm SQL bằng cách thoát đúng cách là một trong những lý do đã được tạo ra. – Jacob
có thể trùng lặp của [Tôi có thể tránh tất cả các cuộc tấn công SQL-injection bằng cách sử dụng các tham số không?] (Http://stackoverflow.com/questions/3736831/can-i-avoid-all-sql-injection-attacks-by-using-parameters) – Thilo