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) |
ตรวจสอบการนำข้อมูลไปใช้ให้รอบคอบ |