?v=54+or+5459%3D5459&page=1
và ?v=54+or+6721%3D8812&page=1
sẽ cho phép tiêm SQL nếu mã đang chạy truy vấn sẽ sử dụng các giá trị được truyền trong URL mà không lọc chúng, chẳng hạn như mã sau đây. (Đó không phải là mã mà mô-đun đang sử dụng. Đó chỉ là mã cho phép tiêm SQL.)
$statement = "chọn * từ product_variation pv WHERE pv.id = {$_GET['v']}";
Các truy vấn SQL về cơ bản sẽ tương đương với các truy vấn sau.
chọn * từ pv product_variation trong đó pv.id = 54 hoặc 5459 = 5459
chọn * từ pv product_variation trong đó pv.id = 54 hoặc 6721 = 8812
Truy vấn SQL đầu tiên sẽ trả về tất cả các hàng trong product_variation bảng cơ sở dữ liệu, trong khi truy vấn thứ hai sẽ chỉ trả về hàng có ID bằng 54.
Các mô-đun đóng góp và lõi Drupal không nối các giá trị được truyền từ người dùng (thậm chí thông qua URL) với các chuỗi ký tự để tạo chuỗi SQL, nhưng sử dụng thay thế đối số thích hợp, khiến cho việc tiêm SQL không thể thực hiện được.
Chúng cũng không cho phép người dùng cung cấp bất kỳ toán tử nào cho điều kiện của truy vấn nhưng đặt danh sách các toán tử được phép và chỉ cho phép người dùng sử dụng các toán tử đó.
Quá trình quét PCI nhận thấy nó có hai kết quả khác nhau (THẬT
và SAI
) sử dụng ?v=54+or+5459%3D5459&page=1
và ?v=54+or+6721%3D8812&page=1
, giải thích THẬT
như có các hàng phù hợp với truy vấn và SAI
như không có hàng nào phù hợp với truy vấnvà nghĩ rằng SQL injection đã thành công. (Cách quét PCI có thể nói rằng việc truy cập các URL chứa các tham số truy vấn đó sẽ trả về THẬT
và SAI
tôi cũng không rõ.)
Đó không phải là những gì đã xảy ra. Những gì được báo cáo bởi quá trình quét là dương tính giả.