วิธีที่ฉันเห็นการโจมตีด้วยการฉีด SQL สามารถป้องกันได้โดย:
- คัดกรองกรองเข้ารหัสการป้อนข้อมูลอย่างระมัดระวัง (ก่อนแทรกลงใน SQL)
- การใช้คำสั่งที่เตรียมไว้ / แบบสอบถามแบบใช้พารามิเตอร์
ฉันคิดว่ามีข้อดีข้อเสียสำหรับแต่ละข้อ แต่เหตุใด # 2 จึงถูกถอดออกและได้รับการพิจารณาว่ามีวิธีการป้องกันการฉีดยามากหรือน้อย มันปลอดภัยกว่าและมีแนวโน้มที่จะเกิดข้อผิดพลาดน้อยลงหรือมีปัจจัยอื่น ๆ อีกหรือไม่?
ตามที่ฉันเข้าใจถ้าใช้ # 1 อย่างถูกต้องและข้อควรระวังทั้งหมดได้รับการดูแลมันจะมีประสิทธิภาพเท่ากับ # 2
ฆ่าเชื้อโรคกรองและเข้ารหัส
มีความสับสนในส่วนของฉันระหว่างสิ่งที่เป็นฆ่าเชื้อ , การกรองและการเข้ารหัสความหมาย ฉันจะบอกว่าสำหรับวัตถุประสงค์ของฉันทั้งหมดข้างต้นสามารถพิจารณาตัวเลือก 1. ในกรณีนี้ผมเข้าใจว่าการฆ่าเชื้อและการกรองมีศักยภาพในการแก้ไขหรือยกเลิกการป้อนข้อมูลในขณะที่การเข้ารหัสจะเก็บรักษาข้อมูลตามที่เป็นแต่ถอดรหัส อย่างถูกต้องเพื่อหลีกเลี่ยงการโจมตีของการฉีด ฉันเชื่อว่าการหลีกเลี่ยงข้อมูลถือได้ว่าเป็นวิธีการเข้ารหัส
พารามิเตอร์การสืบค้นเทียบกับการเข้ารหัสห้องสมุด
มีคำตอบที่แนวคิดของparameterized queries
และencoding libraries
ที่ได้รับการปฏิบัติแทนกันได้ แก้ไขฉันถ้าฉันผิด แต่ฉันรู้สึกว่าแตกต่างกัน
ความเข้าใจของฉันคือว่าencoding libraries
ไม่ว่าพวกเขาจะมีศักยภาพในการปรับเปลี่ยน SQL "โปรแกรม" ได้ดีเพียงใดเพราะพวกเขากำลังทำการเปลี่ยนแปลง SQL เองก่อนที่มันจะถูกส่งไปยัง RDBMS
Parameterized queries
ในอีกทางหนึ่งส่งโปรแกรม SQL ไปยัง RDBMS ซึ่งปรับการสอบถามให้เหมาะสมกำหนดแผนการดำเนินการแบบสอบถามเลือกดัชนีที่จะใช้เป็นต้นและจากนั้นเสียบข้อมูลเป็นขั้นตอนสุดท้ายภายใน RDBMS ตัวเอง
ห้องสมุดการเข้ารหัส
data -> (encoding library)
|
v
SQL -> (SQL + encoded data) -> RDBMS (execution plan defined) -> execute statement
แบบสอบถามแบบกำหนดพารามิเตอร์
data
|
v
SQL -> RDBMS (query execution plan defined) -> data -> execute statement
ความสำคัญทางประวัติศาสตร์
บางคำตอบพูดถึงว่าแบบสอบถามเชิงประวัติ (PQ) ถูกสร้างขึ้นด้วยเหตุผลด้านประสิทธิภาพและก่อนการโจมตีด้วยการฉีดที่ปัญหาการเข้ารหัสที่เป็นเป้าหมายได้รับความนิยม เมื่อถึงจุดหนึ่งก็เห็นได้ชัดว่า PQ ก็ค่อนข้างมีประสิทธิภาพต่อการโจมตีของการฉีด เพื่อรักษาเจตนารมณ์ของคำถามของฉันทำไม PQ ยังคงเป็นวิธีการเลือกและทำไมมันถึงเจริญรุ่งเรืองเหนือวิธีอื่น ๆ เมื่อพูดถึงการป้องกันการโจมตี SQL injection?