SQL Injection เป็นหนึ่งในเทคนิคการโจมตีที่เก่าแก่ที่สุดแต่ยังคงเป็นภัยคุกคามที่สำคัญ เนื่องจากเว็บไซต์จำนวนมากยังใช้การเชื่อมต่อฐานข้อมูลแบบดั้งเดิม
เหตุการณ์สำคัญที่เกิดขึ้นในไทย
ในปี 2567 พบการโจมตีทางไซเบอร์ที่มุ่งเป้าไปที่ฐานข้อมูลเพิ่มขึ้น โดยมีการใช้เทคนิค SQL Injection ที่ซับซ้อนมากขึ้น และมีการโจมตีทางไซเบอร์ผ่านเว็บมากกว่า 10 ล้านครั้ง เฉลี่ยวันละ 28,130 ครั้ง
วิธีการทำงานของ SQL Injection
เมื่อผู้ใช้กรอกข้อมูลในฟอร์ม เช่น ชื่อผู้ใช้และรหัสผ่าน ระบบจะสร้างคำสั่ง SQL เพื่อตรวจสอบข้อมูล หากไม่มีการป้องกันที่เหมาะสม มิจฉาชีพสามารถใส่โค้ดพิเศษเพื่อเปลี่ยนแปลงคำสั่ง SQL ได้
ตัวอย่างการโจมตี
- การเข้าสู่ระบบโดยไม่ต้องมีรหัสผ่าน: ใส่
' OR 1=1--ในช่องรหัสผ่าน - การดึงข้อมูลทั้งหมด: ใส่
' UNION SELECT * FROM users-- - การลบข้อมูล: ใส่
'; DROP TABLE users-- - การเพิ่มข้อมูลปลอม: ใส่
'; INSERT INTO users VALUES ('hacker','password')--
ประเภทของ SQL Injection
- In-band (Union-based): ใช้ UNION เพื่อดึงข้อมูลจากตารางอื่น เช่น
UNION SELECT username,password FROM users - Error-based: ใช้ข้อผิดพลาดของฐานข้อมูลเพื่อดึงข้อมูล เช่น
AND (SELECT 1 FROM users WHERE username='admin') - Boolean-based: ใช้เงื่อนไข TRUE/FALSE เพื่อดึงข้อมูลทีละบิต เช่น
AND (SELECT SUBSTRING(password,1,1) FROM users WHERE id=1)='a' - Time-based: ใช้การหน่วงเวลาเพื่อดึงข้อมูล เช่น
AND (SELECT SLEEP(5) FROM users WHERE id=1)
วิธีป้องกันที่ได้ผล
- ใช้ Prepared Statements: แยกข้อมูลออกจากคำสั่ง SQL เช่น
SELECT * FROM users WHERE id = ? - Input Validation: ตรวจสอบและทำความสะอาดข้อมูลที่รับเข้ามา
- ใช้ ORM: ใช้ Object-Relational Mapping เช่น Hibernate, Entity Framework
- จำกัดสิทธิ์ฐานข้อมูล: ใช้บัญชีที่มีสิทธิ์จำกัด ไม่ใช่ root
- เข้ารหัสข้อมูลสำคัญ: เข้ารหัสข้อมูลที่สำคัญในฐานข้อมูล
กรณีศึกษาจริง
เว็บไซต์ร้านค้าออนไลน์แห่งหนึ่งใช้คำสั่ง SQL แบบง่าย: SELECT * FROM products WHERE name = '$search_term' มิจฉาชีพใส่ apple'; DROP TABLE products;-- ในช่องค้นหา ทำให้ตารางสินค้าถูกลบทั้งหมด
เครื่องมือที่ใช้ในการป้องกัน
- WAF (Web Application Firewall): เช่น ModSecurity, Cloudflare WAF
- SQL Injection Scanners: เช่น SQLMap, Havij, Acunetix
- Code Analysis Tools: เช่น SonarQube, Veracode
- Database Monitoring: ตรวจสอบคำสั่ง SQL ที่ผิดปกติ
การทดสอบความปลอดภัย
ก่อนเปิดใช้งานเว็บไซต์ ควรทำการทดสอบ SQL Injection ด้วยเครื่องมือต่างๆ เช่น SQLMap หรือทำการ Penetration Testing โดยผู้เชี่ยวชาญ
สัญญาณเตือน
- เว็บไซต์แสดงข้อผิดพลาดของฐานข้อมูล
- สามารถเข้าสู่ระบบได้โดยไม่ต้องมีรหัสผ่านที่ถูกต้อง
- พบข้อมูลที่ไม่ควรปรากฏในหน้าเว็บ
- ระบบทำงานช้าผิดปกติเมื่อกรอกข้อมูลพิเศษ
ความคิดเห็น