?v=54+หรือ+5459%3D5459&page=1
และ ?v=54+หรือ+6721%3D8812&page=1
จะอนุญาต การฉีด SQL หากโค้ดที่รันการสืบค้นจะใช้ค่าที่ส่งผ่านใน URL โดยไม่กรองค่า ดังตัวอย่างโค้ดต่อไปนี้ (ไม่ใช่โค้ดที่โมดูลใช้ เป็นเพียงโค้ดที่อนุญาตการฉีด SQL)
$statement = "select * from product_variation pv WHERE pv.id = {$_GET['v']}";
เคียวรี SQL จะเทียบเท่าเป็นหลักตามลำดับกับสิ่งต่อไปนี้
เลือก * จาก product_variation pv โดยที่ pv.id = 54 หรือ 5459 = 5459
เลือก * จาก product_variation pv โดยที่ pv.id = 54 หรือ 6721 = 8812
แบบสอบถาม SQL แรกจะส่งคืนแถวทั้งหมดใน product_variation ตารางฐานข้อมูล ในขณะที่แบบสอบถามที่สองจะส่งคืนเฉพาะแถวที่ ID เท่ากับ 54
Drupal core และโมดูลที่สนับสนุนจะไม่เชื่อมค่าที่ส่งผ่านจากผู้ใช้ (แม้ว่าจะผ่าน URL) ด้วยสตริงตามตัวอักษรเพื่อสร้างสตริง SQL แต่ใช้การแทนที่อาร์กิวเมนต์ที่เหมาะสม ทำให้ไม่สามารถแทรก SQL ได้
นอกจากนี้ยังไม่อนุญาตให้ผู้ใช้ระบุโอเปอเรเตอร์ใดๆ ให้กับเงื่อนไขของคิวรี แต่ให้กำหนดรายการโอเปอเรเตอร์ที่อนุญาตและอนุญาตให้ผู้ใช้ใช้โอเปอเรเตอร์เท่านั้น
การสแกน PCI พบว่าได้ผลลัพธ์ที่แตกต่างกันสองรายการ (จริง
และ เท็จ
) โดยใช้ ?v=54+หรือ+5459%3D5459&page=1
และ ?v=54+หรือ+6721%3D8812&page=1
ตีความ จริง
เช่น มีแถวที่ตรงกับข้อความค้นหา และ เท็จ
เช่น ไม่มีแถวที่ตรงกับข้อความค้นหาและคิดว่าการฉีด SQL สำเร็จแล้ว (การสแกน PCI สามารถบอกได้อย่างไรว่าการเข้าถึง URL ที่มีพารามิเตอร์การค้นหาเหล่านั้นจะกลับมา จริง
และ เท็จ
ไม่ชัดเจนสำหรับฉันเช่นกัน)
นั่นไม่ใช่สิ่งที่เกิดขึ้น สิ่งที่รายงานโดยการสแกนเป็นผลบวกลวง