SQL Injection เป็นเทคนิคการโจมตีที่ใช้เทคโนโลยี SQL เพื่อโจมตีฐานข้อมูลของระบบ เป็นการกรอกข้อมูลโจมตีโดยไม่ได้รับอนุญาตหรือการตรวจสอบจากฝั่งเซิร์ฟเวอร์ การโจมตีด้วย SQL Injection เป็นอันตรายมากเนื่องจากผู้โจมตีสามารถสั่งคำสั่ง SQL ที่ไม่ได้รับอนุญาตไปยังฐานข้อมูล ซึ่งอาจทำให้ข้อมูลต่างๆ บนฐานข้อมูลถูกเปลี่ยนแปลงหรือถูกลบได้ หรือทำให้ผู้โจมตีสามารถดูข้อมูลที่ควรจะไม่สามารถดูได้ ดังนั้นเราจึงต้องรู้จัก SQL Injection เพื่อป้องกันการโจมตีที่อาจเกิดขึ้นกับระบบของเรา
วิธีการทำงานของ SQL Injection
วิธีการทำงานของ SQL Injection คือ การป้อนข้อมูลที่ไม่ได้รับการตรวจสอบเข้าสู่ฐานข้อมูล ดังนั้นเมื่อเราเขียนโปรแกรมหรือเว็บไซต์ที่รับข้อมูลจากผู้ใช้ อย่างเช่น username หรือ password แล้วเราไม่ตรวจสอบความถูกต้องของข้อมูลที่ผู้ใช้กรอกเข้ามาให้ การกระทำดังกล่าวจะเป็นประตูเปิดให้กับผู้โจมตีที่จะสามารถใส่ข้อมูลชุดพิเศษ (special character) เช่น '
, "
, ;
, --
เข้าไปในคำสั่ง SQL ที่มีอยู่ เพื่อทำให้คำสั่ง SQL เปลี่ยนแปลงหรือเพิ่มเติมได้
ตัวอย่างการโจมตีด้วย SQL Injection ในการ Login ด้วย username และ password ดังนี้
SELECT * FROM users WHERE username='admin' AND password='password';
ผู้โจมตีจะสามารถใส่ข้อมูลชุดพิเศษ เพื่อทำให้คำสั่ง SQL เปลี่ยนแปลงได้ ตัวอย่างเช่น
SELECT * FROM users WHERE username='admin' OR 1=1; -- ' AND password='password';
ในตัวอย่างข้างต้นผู้โจมตีใส่ OR 1=1; --
เพื่อให้ SQL ทำการเปรียบเทียบค่า 1=1
ซึ่งจะเป็นจริงเสมอ และ --
ใช้ในการเขียน comment ที่ไม่ส่งผลต่อการทำงานของ SQL ซึ่งทำให้คำสั่ง SQL ที่เหลือถูกลบทิ้ง ดังนั้นคำสั่ง SQL ที่ผู้โจมตีส่งเข้าไปในระบบจะเหมือนกับ
SELECT * FROM users WHERE username='admin' OR 1=1;
เมื่อคำสั่ง SQL ข้างต้นทำงาน จะได้ผลลัพธ์ที่เป็นจริงเสมอ เนื่องจากเงื่อนไข 1=1
เป็นจริง ซึ่งจะทำให้ผู้ใช้เข้าสู่ระบบได้โดยไม่ต้องใส่รหัสผ่าน
วิธีการป้องกัน
วิธีการป้องกัน SQL Injection คือ การตรวจสอบและกรองข้อมูลที่ผู้ใช้กรอกเข้ามาก่อนส่งไปยังฐานข้อมูล ซึ่งสามารถทำได้โดยใช้ฟังก์ชัน mysqli_real_escape_string() เพื่อป้องกันการโจมตีด้วย SQL Injection และควรใช้ Prepared Statements เพื่อเพิ่มความปลอดภัยในการเชื่อมต่อฐานข้อมูล MySQL โดย Prepared Statements เป็นเทคนิคในการเชื่อมต่อฐานข้อมูล MySQL โดยมีการเตรียมคำสั่ง SQL ล่วงหน้า ดังนั้นไม่จำเป็นต้องนำเข้าข้อมูลจากผู้ใช้โดยตรง และป้องกันไม่ให้ผู้โจมตีสามารถเขียน SQL ภายในแอปพลิเคชันได้
นอกจากนี้ยังมีเครื่องมือในการตรวจสอบ SQL Injection อย่างต่อเนื่องที่ช่วยป้องกันการโจมตีด้วย SQL Injection ได้ เช่น ModSecurity ซึ่งเป็นเครื่องมือระบบป้องกันโจมตี (Intrusion Prevention System) ที่สามารถตรวจสอบ SQL Injection และโจมตีอื่นๆ ได้ นอกจากนี้ยังมีเครื่องมืออื่นๆ เช่น SQLMap, W3af, Burp Suite ฯลฯ ที่ช่วยตรวจสอบและทดสอบการเชื่อมต่อฐานข้อมูล MySQL เพื่อหาช่องโหว่และป้องกัน SQL Injection ในแอปพลิเคชันของคุณ
0 ความคิดเห็น