
XML-RPC เป็นโปรโตคอลเก่าแก่ที่ WordPress ใช้รับส่งข้อมูลจากระยะไกลมาตั้งแต่เวอร์ชัน 3.5 แต่ทุกวันนี้มันกลายเป็นหนึ่งในช่องโหว่ที่แฮกเกอร์ใช้โจมตีเว็บ WordPress บ่อยที่สุด หลายเจ้าของเว็บไม่รู้ด้วยซ้ำว่าตัวเองเปิดใช้งานอยู่ บทความนี้จะอธิบายว่า XML-RPC คืออะไร ทำงานอย่างไร เสี่ยงแค่ไหน และควรปิดเมื่อไหร่
nn
XML-RPC คืออะไร และทำงานอย่างไรใน WordPress
n
XML-RPC ย่อมาจาก XML Remote Procedure Call คือระบบที่อนุญาตให้โปรแกรมภายนอกเชื่อมต่อกับ WordPress ผ่านไฟล์ xmlrpc.php โดยส่งคำสั่งในรูปแบบ XML ผ่าน HTTP ในอดีตมันถูกใช้กับแอปบนมือถือ WordPress, Jetpack, Windows Live Writer รวมถึงระบบ pingback และ trackback เพื่อแจ้งเตือนเว็บอื่นว่ามีการอ้างอิงบทความ
n
ปัจจุบัน WordPress มี REST API ที่ทำงานได้ดีกว่า ปลอดภัยกว่า และรองรับการยืนยันตัวตนที่ทันสมัยกว่า ทำให้ XML-RPC แทบไม่จำเป็นสำหรับเว็บทั่วไปอีกต่อไป
nn

nn
ทำไม XML-RPC ถึงเป็นความเสี่ยง
n
ปัญหาหลักของ XML-RPC คือมันเปิดประตูให้แฮกเกอร์โจมตีได้หลายรูปแบบ:
n
- n
- Brute Force ผ่าน multicall: XML-RPC อนุญาตให้ส่งคำขอหลายพันครั้งในการเชื่อมต่อเดียว (system.multicall) แฮกเกอร์จึงทดสอบรหัสผ่านได้รวดเร็วกว่าการโจมตีหน้า wp-login.php หลายเท่า อ่านเพิ่มเติมเรื่อง Brute Force Attack WordPress คืออะไรและวิธีป้องกัน
- DDoS ผ่าน Pingback: แฮกเกอร์ใช้ฟีเจอร์ pingback ของ XML-RPC เพื่อสั่งให้เว็บ WordPress หลายร้อยเว็บส่ง request ไปยังเป้าหมายพร้อมกัน ทำให้เว็บเป้าหมายล่ม
- ยืนยันตัวตนด้วย credential ล้วน ๆ: ทุกการเรียกใช้ XML-RPC ต้องส่ง username และ password ในทุก request ซึ่งเพิ่มความเสี่ยงหาก credential รั่วไหล
n
n
n
n
ความเสี่ยงเหล่านี้เป็นส่วนหนึ่งของ Checklist ความปลอดภัย WordPress ที่เจ้าของเว็บควรตรวจสอบเป็นประจำ
nn
วิธีตรวจสอบว่าเว็บเปิด XML-RPC อยู่หรือไม่
n
สามารถตรวจสอบได้หลายวิธี:
n
- n
- เปิดเบราว์เซอร์แล้วไปที่
https://yoursite.com/xmlrpc.php— ถ้าเห็นข้อความ “XML-RPC server accepts POST requests only” แสดงว่าเปิดใช้งานอยู่ - ใช้เครื่องมือออนไลน์อย่าง WPScan หรือ Pingdom ตรวจสอบ endpoint
- ดู access log ของ server ค้นหา request ที่ส่งไป
xmlrpc.phpจำนวนมากผิดปกติ
n
n
n
nn

nn
วิธีปิด XML-RPC ใน WordPress ทีละขั้นตอน
n
มีหลายวิธีปิด XML-RPC ขึ้นอยู่กับสิทธิ์การเข้าถึง server ของคุณ:
nn
วิธีที่ 1: ปิดผ่าน Plugin
n
ติดตั้ง plugin ชื่อ Disable XML-RPC หรือใช้ Wordfence ที่มีตัวเลือกบล็อก XML-RPC ในตัว เหมาะสำหรับผู้ที่ไม่ต้องการแก้ไขโค้ด อ่านเพิ่มเติมว่า Wordfence คืออะไรและเหมาะกับใคร
nn
วิธีที่ 2: บล็อกผ่าน .htaccess (Apache)
n
เพิ่มโค้ดต่อไปนี้ในไฟล์ .htaccess ที่ root ของเว็บ:
n
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>
n
วิธีนี้บล็อก request ตั้งแต่ระดับ server ก่อนที่ WordPress จะโหลด ประหยัด resource กว่าการปิดผ่าน plugin
nn
วิธีที่ 3: ปิดผ่าน functions.php
n
เพิ่มโค้ดใน functions.php ของ theme หรือใน mu-plugin:
n
add_filter('xmlrpc_enabled', '__return_false');
n
วิธีนี้ปิดการประมวลผล XML-RPC แต่ไฟล์ xmlrpc.php ยังสามารถเข้าถึงได้อยู่ จึงไม่ได้ลดภาระ server เท่าวิธี .htaccess
nn
nn
กรณีที่ยังต้องใช้ XML-RPC อยู่
n
ก่อนปิด ควรตรวจสอบก่อนว่าเว็บของคุณยังใช้ฟีเจอร์เหล่านี้อยู่หรือไม่:
n
- n
- Jetpack: บางฟีเจอร์ของ Jetpack ยังพึ่ง XML-RPC แต่ Automattic กำลังย้ายไป REST API ทีละส่วน ตรวจสอบว่าฟีเจอร์ที่คุณใช้จำเป็นหรือไม่
- แอป WordPress บนมือถือ (เวอร์ชันเก่า): แอปใหม่ใช้ REST API แล้ว ถ้าอัปเดตแอปแล้วไม่จำเป็นต้องเปิด XML-RPC
- เครื่องมือ third-party: ตรวจสอบ API ที่ใช้อยู่ว่ายังพึ่ง XML-RPC หรือรองรับ REST API แล้ว
n
n
n
n
ถ้าไม่แน่ใจ ให้ลองปิดแล้วทดสอบว่าระบบยังทำงานปกติหรือไม่ก่อนตัดสินใจถาวร
nn
เมื่อไหร่ควรปรึกษาผู้เชี่ยวชาญ
n
หากคุณพบ request ไปที่ xmlrpc.php จำนวนมากผิดปกติใน log, เว็บช้าลงโดยไม่ทราบสาเหตุ, หรือไม่แน่ใจว่า server ของตัวเองรองรับการแก้ไข .htaccess แบบไหน ควรให้ผู้เชี่ยวชาญเข้ามาดูแล บริการ เสริมความปลอดภัย WordPress ของเราครอบคลุมการปิด XML-RPC, ตรวจสอบ log, และ hardening จุดอื่น ๆ ทั้งหมดในครั้งเดียว นอกจากนี้ยังควรศึกษาเรื่อง Website Security Hardening คืออะไร เพื่อเข้าใจภาพรวมการป้องกันเว็บในระดับลึกขึ้น
คำถามที่พบบ่อย
ถ้าปิด XML-RPC แล้ว WordPress จะทำงานได้ปกติไหม?
ในกรณีส่วนใหญ่ทำงานได้ปกติ เพราะ WordPress ใช้ REST API แทนแล้ว เว้นแต่คุณใช้ Jetpack บางฟีเจอร์หรือเครื่องมือเก่าที่ยังพึ่ง XML-RPC อยู่ ลองปิดแล้วทดสอบดูก่อน
XML-RPC เปิดอยู่โดย default ใน WordPress ไหม?
ใช่ WordPress เปิด XML-RPC ไว้โดย default ตั้งแต่เวอร์ชัน 3.5 ขึ้นมา ต้องปิดเองถ้าต้องการลดความเสี่ยง
Jetpack จำเป็นต้องใช้ XML-RPC ไหม?
บางฟีเจอร์ของ Jetpack เดิมพึ่ง XML-RPC แต่ Automattic กำลังย้ายมาใช้ REST API ทีละส่วน ถ้าใช้ Jetpack เวอร์ชันใหม่ และไม่ได้ใช้ฟีเจอร์เก่า ๆ มักปิด XML-RPC ได้โดยไม่มีปัญหา
วิธีบล็อก XML-RPC ผ่าน .htaccess ปลอดภัยกว่า plugin ไหม?
ปลอดภัยและมีประสิทธิภาพกว่า เพราะตัด request ตั้งแต่ระดับ web server ก่อนที่ PHP หรือ WordPress จะโหลด ช่วยลด load server ด้วย แต่ต้องมีสิทธิ์แก้ไขไฟล์ .htaccess บน server
