วิธีป้องกัน SQL Injection บน WordPress

SQL Injection คือการโจมตีที่อาศัยข้อมูลป้อนเข้าที่ไม่ได้รับการตรวจสอบ เพื่อส่งคำสั่งไปยังฐานข้อมูลโดยไม่ตั้งใจ เจ้าของเว็บไซต์ WordPress ป้องกันได้ด้วยการดูแลธีมและปลั๊กอินให้ปลอดภัย ส่วนผู้พัฒนาควรใช้ WordPress API และเตรียมคำสั่งฐานข้อมูลอย่างถูกต้อง

❶ เข้าใจว่าเจ้าของเว็บไซต์ควรเริ่มจากอะไร

โดยทั่วไปไม่มีปุ่มในหลังบ้านที่เปิดแล้วป้องกัน SQL Injection ได้ทุกกรณี ความเสี่ยงมักเกี่ยวข้องกับโค้ดใน WordPress ธีม ปลั๊กอิน หรือส่วนที่พัฒนาขึ้นเอง ดังนั้นเจ้าของเว็บไซต์ควรเริ่มจากการลดส่วนที่เสี่ยงและเลือกใช้ส่วนเสริมที่ดูแลต่อเนื่อง

① อัปเดต WordPress ธีม และปลั๊กอิน

ติดตั้งการอัปเดตจากแหล่งที่เชื่อถือได้ และตรวจรายการอัปเดตเป็นประจำ หากปลั๊กอินหรือธีมไม่ได้รับการดูแลแล้ว ให้พิจารณาหาทางเลือกที่ยังได้รับการอัปเดตและทดสอบก่อนนำมาใช้จริง

② ลบส่วนเสริมที่ไม่จำเป็น

ลบธีมและปลั๊กอินที่ไม่ได้ใช้ออกจากเว็บไซต์ ไม่ควรเก็บส่วนเสริมที่ไม่รู้แหล่งที่มาหรือไฟล์ที่ได้จากเว็บไซต์ไม่น่าเชื่อถือ แม้ส่วนเสริมเหล่านั้นจะปิดใช้งานอยู่ก็ตาม

③ ตรวจสิทธิ์ผู้ใช้และไฟล์

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

❷ เลือกปลั๊กอินและธีมอย่างรอบคอบ

ก่อนติดตั้ง ให้ตรวจชื่อผู้พัฒนา ประวัติการอัปเดต ความเข้ากันได้กับ WordPress และช่องทางแจ้งปัญหา อ่านรายละเอียดว่าปลั๊กอินต้องเข้าถึงหรือจัดเก็บข้อมูลใดบ้าง และหลีกเลี่ยงปลั๊กอินหรือธีมที่ถูกดัดแปลงจากแหล่งที่ไม่รู้จัก

หากเว็บไซต์ใช้ส่วนเสริมที่พัฒนาขึ้นเอง ให้ขอให้ผู้พัฒนาตรวจสอบความปลอดภัย โดยเฉพาะส่วนที่รับข้อมูลจากแบบฟอร์ม URL หรือคำขอจากผู้ใช้ แล้วนำข้อมูลไปค้นหาหรือแก้ไขฐานข้อมูล

❸ ใช้ WordPress API และเตรียมคำสั่งฐานข้อมูลให้ถูกต้อง

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

① ตรวจสอบและกำหนดรูปแบบข้อมูล

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

② แยกการป้องกันฐานข้อมูลออกจากการแสดงผล

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

❹ ป้องกันฐานข้อมูลและลดผลกระทบ

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

ComSiam แนะนำให้สำรองทั้งไฟล์เว็บไซต์และฐานข้อมูล เก็บสำเนาแยกจากโฮสติ้ง และทดสอบการกู้คืน เพื่อให้พร้อมรับมือหากข้อมูลเสียหายหรือพบการแก้ไขที่ไม่รู้จัก

❺ ใช้ WAF เป็นชั้นเสริมและตรวจสอบเว็บไซต์

WAF อาจช่วยกรองคำขอที่มีรูปแบบน่าสงสัยก่อนถึงเว็บไซต์ แต่ไม่สามารถทดแทนการอัปเดตและการแก้ไขช่องโหว่ในปลั๊กอินหรือโค้ดได้ ควรใช้เป็นมาตรการเสริมร่วมกับการดูแลระบบ

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

❻ เช็กลิสต์ป้องกัน SQL Injection

  • อัปเดต WordPress ธีม และปลั๊กอิน
  • ใช้ส่วนเสริมจากแหล่งที่เชื่อถือได้
  • ลบธีมและปลั๊กอินที่ไม่จำเป็นหรือไม่ได้รับการดูแล
  • จำกัดสิทธิ์ผู้ใช้และการเข้าถึงฐานข้อมูล
  • ให้ผู้พัฒนาตรวจโค้ดที่รับข้อมูลจากผู้ใช้
  • ใช้ WordPress API และวิธีเตรียมคำสั่งฐานข้อมูลที่ปลอดภัย
  • ใช้ WAF เป็นชั้นเสริม ไม่ใช่มาตรการเดียว
  • สำรองไฟล์และฐานข้อมูล พร้อมทดสอบการกู้คืน

การป้องกัน SQL Injection ต้องดูแลทั้งโค้ด ส่วนเสริม และสิทธิ์การเข้าถึงฐานข้อมูล หากไม่แน่ใจว่าโค้ดที่พัฒนาขึ้นเองปลอดภัยหรือไม่ ควรให้ผู้พัฒนาตรวจสอบก่อนใช้งานจริง สำหรับเว็บไซต์ของ ComSiam การอัปเดตและตรวจส่วนเสริมเป็นประจำช่วยลดความเสี่ยงจากช่องโหว่ที่รู้จักได้