WordPress XML-RPC เป็นฟังก์ชันเก่าๆ ที่มากับ WordPress CMS เป็นวิธี стандарทการสื่อสารระหว่างเว็บไซต์ WordPress และเทคโนโลยีเว็บ/มือถืออื่นๆ ถ้าคุณใช้ WordPress บทความนี้จะอธิบายว่า XML-RPC คืออะไร และทำไมควรปิดมันเพื่อป้องกันตัวเอง
XML-RPC ทำงานอย่างไร
เว็บไซต์ WordPress ของคุณออกแบบมาทำงานบนเว็บ ใช้เทคโนโลยีหลัก مثل HTML, CSS, และ PHP ไฟล์ทั้งหมดจัดเก็บในโฟลเดอร์ภายในเซิร์ฟเวอร์โฮสติ้ง
เมื่อผู้เยี่ยมชมคลิกโดเมนหรืออนุพันธ์ พวกเขาจะมาถึงหน้าเว็บ โฟลเดอร์ที่มีข้อมูลที่ต้องการจะดาวน์โหลดไปที่เบราว์เซอร์ เบราว์เซอร์ตีความข้อมูลและแสดงผล
แต่อยากเข้าถึงเว็บไซต์ไม่ได้ผ่านเบราว์เซอร์ล่ะ? อยากเข้าถึงจากซอฟต์แวร์แอดมินแบบกำหนดเอง หรือแอปมือถือ?

WordPress XML-RPC แก้ปัญหานี้
XML-RPC เป็น API ที่ห่อข้อมูลสำคัญในไฟล์ XML เรียบง่าย ส่งไปให้แอปมือถือหรือซอฟต์แวร์ระยะไกล แอปมือถือจึงinflate ข้อมูลด้วยดีไซน์ที่ตั้งค่าไว้ล่วงหน้า แอปไม่ต้องดาวน์โหลดไฟล์เว็บหนักๆ แต่วันเข้าถึงข้อมูลในแอปที่สะดวก
แต่จุดอ่อนคือ ต้องส่งชื่อผู้ใช้และรหัสผ่านทุกครั้งที่ยืนยันตัวตนผ่าน XML-RPC ทำให้โดนโจมตีจากแฮกเกอร์ง่าย
XML-RPC ทำให้คุณอ่อนไหวต่อการโจมตีอย่างไร
XML-RPC ทำเว็บไซต์อ่อนไหวอย่างน้อย 2 ทาง: การโจมตีแบบ Brute Force และ การขโมยข้อมูลล็อกอิน
1. การโจมตีแบบ Brute Force
ผู้โจมตีพยายามติดไวรัสเว็บไซต์ด้วยการโจมตีแบบ Brute Force

Brute Force คือเกมทายรหัสผ่าน พยายามทายซ้ำๆ จนสำเร็จ
เกิดขึ้นหลายพันครั้งต่อวินาที ทำให้ลองได้ล้านชุดในเวลาสั้น
ใน WordPress ปกติสามารถจำกัดการล็อกอินผิดได้ แต XML-RPC ไม่จำกัดจำนวนครั้งที่ลอง
ผู้โจมตีลองทายได้ตลอดโดยหลอกเซิร์ฟเวอร์ว่าพวกเขาเป็นแอดมินที่ต้องการดึงข้อมูล และเพราะไม่มีข้อมูลถูกต้อง จึงเข้าถึงไม่ได้ ลองต่อเนื่องโดยไม่มีที่สิ้นสุด
เพราะไม่มีขีดจำกัดการลอง แค่เรื่องเวลาก่อนจะเจอรหัสผ่าน แฮกเกอร์ยังสามารถทำให้เว็บล้มด้วย XML-RPC DDOS (ส่งคำขอ "pingback" เเยวๆ ไปที่ XML-RPC จนเซิร์ฟเวอร์ 과부하 และล้ม)
2. การสอดแนม/ขโมยข้อมูลล็อกอิน

จุดอ่อนอีกอย่างคือระบบยืนยันตัวตนไม่มีประสิทธิภาพ ทุกครั้งที่ส่งคำขอเข้าถึง ต้องส่งข้อมูลล็อกอินด้วย หมายถึง username และ password ถูกเปิดเผย
แฮกเกอร์อาจรออยู่เพื่อสอดแนมแพ็กเก็ตข้อมูลนี้ พอสำเร็จ ไม่ต้องทำ Brute Force แล้ว เพียงเดินเข้ามาในเว็บด้วยข้อมูลถูกต้อง
ควรปิด XML-RPC ใน WordPress หรือไม่?
ตั้งแต่ WordPress 3.5 โค้ด XML-RPC ปรับปรุงมากจนทีม WordPress ถือว่าปลอดพอที่จะเปิดโดยค่าเริ่มต้น ถ้าคุณใช้แอปมือถือหรือซอฟต์แวร์ระยะไกลจัดการเว็บ คุณอาจไม่ควรปิด XML-RPC
แต่ถ้าคุณใส่ใจความปลอดภัยเซิร์ฟเวอร์มาก อาจจะดีกว่าที่ปิดมันไว้ เพราะมันปิดประตูหนึ่งที่แฮกเกอร์ใช้โจมตี
วิธีปิด XML-RPC ใน WordPress
XML-RPC เปิดอยู่โดยค่าเริ่มต้น มีหลายวิธีปิด
หมายเหตุ: ถ้าใช้ปลั๊กอิน JetPack ยอดนิยม ไม่สามารถปิด XML-RPC ได้ เพราะ Jetpack ต้องใช้มันสื่อสารกับเซิร์ฟเวอร์ นอกจากนี้ ก่อนปิด ต้องแน่ใจว่าไม่มีปลั๊กอินหรือธีมไหนใช้ XML-RPC อยู่
การปิด XML-RPC
1. หาโฟลเดอร์ธีม (ปกติอยู่ที่ "wp-content/themes/") เปิดไฟล์ "functions.php"
2. วางโค้ดต่อไปนี้ท้ายไฟล์:
// Disable use XML-RPC add_filter('xmlrpc_enabled', '__return_false');
บันทึก "functions.php" จะปิดฟังก์ชัน XML-RPC ใน WordPress โปรดทราบ วิธีนี้ปิด XML-RPC เท่านั้น แต่ไม่หยุดแฮกเกอร์โจมตี เพราะไฟล์ xml-rpc.php ยังอยู่
บล็อกการเข้าถึงไฟล์ XML-RPC
วิธีที่ดีที่สุดป้องกันแฮกเกอร์คือบล็อกการเข้าถึงไฟล์ xml-rpc
เซิร์ฟเวอร์ Apache
ถ้า WordPress รันบน Apache (ถ้าเห็นไฟล์ ".htaccess" ในโฟลเดอร์ติดตั้ง WordPress แทบแน่ใจว่าเป็น Apache) ทำตามขั้นตอน:
1. ล็อกอิน CPanel หา File Manager

2. เปิด File Manager ไปที่โฟลเดอร์ "public_html" แล้วไฟล์ ".htaccess"

3. คลิกขวาแก้ไขไฟล์

4. ท้ายไฟล์ วางโค้ดนี้:
# Disallow all WordPress xmlrpc.php requests to this domain <Files xmlrpc.php> order deny,allow deny from all </Files>

5. บันทึกและออก
เซิร์ฟเวอร์ Nginx
สำหรับ Nginx วางโค้ดนี้ในไฟล์ config เซิร์ฟเวอร์:
# nginx block xmlrpc.php requests location /xmlrpc.php { deny all; }
ตอนนี้เว็บไซต์ปลอดภัยจากการโจมตีแล้ว
สรุป
การโจมตี Brute Force และขโมยข้อมูลจะยังคงเป็นปัญหาให้เจ้าของเว็บ เป็นหน้าที่ของคุณให้เว็บปลอดภัย การปิด XML-RPC เป็นวิธีมีประสิทธิภาพ ตามคู่มือข้างบน และปกป้องเว็บไซต์และผู้เยี่ยมชมจากแฮกเกอร์ตั้งแต่วันนี้