ฉันรู้ว่าการสืบค้น SQL แบบแปรผันเป็นวิธีที่ดีที่สุดในการฆ่าเชื้ออินพุตของผู้ใช้เมื่อสร้างเคียวรีที่มีการป้อนข้อมูลของผู้ใช้ แต่ฉันสงสัยว่าเกิดอะไรขึ้นกับการป้อนข้อมูลผู้ใช้และหลีกเลี่ยงคำพูดเดี่ยว ๆ นี่คือรหัส:
sSanitizedInput = "'" & Replace(sInput, "'", "''") & "'"
เครื่องหมายคำพูดเดี่ยวใด ๆ ที่ผู้ใช้ป้อนจะถูกแทนที่ด้วยเครื่องหมายคำพูดเดี่ยวสองชั้นซึ่งจะช่วยลดความสามารถของผู้ใช้ในการวางสตริงดังนั้นสิ่งอื่น ๆ ที่พวกเขาอาจพิมพ์เช่นอัฒภาคเครื่องหมายเปอร์เซ็นต์และอื่น ๆ ทั้งหมดจะเป็นส่วนหนึ่งของสตริงและ ไม่ได้ดำเนินการจริง ๆ เป็นส่วนหนึ่งของคำสั่ง
เรากำลังใช้ Microsoft SQL Server 2000 ซึ่งฉันเชื่อว่า single-quote เป็นตัวคั่นสตริงเท่านั้นและวิธีเดียวที่จะหลีกเลี่ยงตัวคั่นสตริงดังนั้นจึงไม่มีวิธีดำเนินการใด ๆ กับผู้ใช้ประเภทใด ๆ
ฉันไม่เห็นวิธีใดที่จะเปิดการโจมตีด้วยการฉีด SQL เพื่อต่อต้านสิ่งนี้ แต่ฉันรู้ว่าถ้านี่เป็นกระสุนที่ดูเหมือนกับฉันคนอื่นจะคิดว่ามันแล้วและมันจะเป็นเรื่องธรรมดา
เกิดอะไรขึ้นกับรหัสนี้ มีวิธีการโจมตี SQL injection ผ่านเทคนิคการฆ่าเชื้อนี้หรือไม่ ตัวอย่างอินพุตของผู้ใช้ที่ใช้ประโยชน์จากเทคนิคนี้จะเป็นประโยชน์
UPDATE:
ฉันยังไม่รู้วิธีการเปิดใช้การโจมตี SQL injection กับรหัสนี้อย่างมีประสิทธิภาพ มีบางคนแนะนำว่าแบ็กสแลชจะหนีจากเครื่องหมายคำพูดเดียวและปล่อยให้คำสั่งหยุดสตริงเพื่อให้ส่วนที่เหลือของสตริงจะถูกดำเนินการโดยเป็นส่วนหนึ่งของคำสั่ง SQL และฉันรู้ว่าวิธีนี้จะทำงานเพื่อฉีด SQL ลงใน ฐานข้อมูล MySQL แต่ใน SQL Server 2000 วิธีเดียว (ที่ฉันสามารถค้นหา) เพื่อหลีกเลี่ยงการอ้างคำพูดเดียวคือการอ้างอีกครั้งเดียว; แบ็กสแลชจะไม่ทำ
และถ้าไม่มีวิธีที่จะหยุดการหลบหนีของคำพูดเดียวไม่มีส่วนที่เหลือของผู้ใช้จะถูกดำเนินการเพราะมันจะถูกนำมาเป็นสายเดียวที่ต่อเนื่องกัน
ฉันเข้าใจว่ามีวิธีที่ดีกว่าในการฆ่าเชื้ออินพุต แต่ฉันสนใจการเรียนรู้มากขึ้นว่าทำไมวิธีการที่ฉันให้ไว้ข้างต้นจะไม่ทำงาน หากใครรู้วิธีเฉพาะใด ๆ เพื่อติดตั้งการโจมตีการฉีด SQL กับวิธีการฆ่าเชื้อนี้ฉันชอบที่จะเห็นมัน