SQL Injection

คือ การที่ในเวปมีการรับข้อมูลจากผู้ใช้ แล้วนำไปใช้ในการสั่งให้ฐานข้อมูลทำงาน แล้ว ผู้ใช้พยายามที่จะหลอกโปรแกรมให้ทำงานนอกเหนือจากที่เราต้องการ หรือ หลอกให้โปรแกรมทำงานโดยผ่านการตรวจสอบเงื่อนไขบางอย่าง

สาเหตุ:

ไม่ได้ทำการตรวจสอบข้อมูลที่ผู้ใช้ใส่เข้ามาก่อนการนำไปใช้งาน เช่น ตอ้งการให้ใส่ password ซึ่งมี ส่วนที่ใช้ตรวจสอบ password ดังนี้
Query = "SELECT * FROM product WHERE Password='$input'";
แต่ผู้ใช้ทำการใส่ ข้อมูลเป็น a' or 1=1--
ดังนั้น query ที่ได้จะเป้น
Query = "SELECT * FROM product WHERE Password='a' or 1=1--'";
จะเห็นว่าเมื่อนำไช้งานแล้ว จะสามารถเรียกดูข้อมูลได้เสมอ เนื่องจาก 1=1 เป็นจริง

อันตราย:

ผู้ใช้สามารถที่จะเรียกดู หรือแก้ไขฐานข้อมูลได้อย่างอิสระ

วิธีป้องกัน:

ทำการตรวจสอบข้อมูลก่อนนำไปใช้ว่ามีลักษณะตรงตามที่ต้องการหรือไม่ และทำการ encode ตัวอักษรที่รับมาเสมอ

ตัวอย่างช่องโหว่

Nessus ID

Name

วิธีแก้ไข

11139 wpoison (nasl version) ตรวจสอบการนำข้อมูลไปใช้ให้รอบคอบ