כל התקנה של וורדפרס מגיעה עם קובץ בשם xmlrpc.php בתיקיית השורש של האתר, והוא מופעל כברירת מחדל. אם אי פעם הצצתם בלוגים של השרת, סביר להניח שכבר ראיתם איך מנצלים אותו לרעה.
מדובר בנקודת קצה ותיקה מסוג Remote Procedure Call, שהוצגה עוד לפני ש-REST API של וורדפרס היה קיים. בזמנו זו הייתה הדרך היחידה שבה אפליקציות חיצוניות יכלו לתקשר עם וורדפרס. כיום ה-REST API מכסה את אותם מקרי השימוש, עם אימות טוב יותר והגבלת קצב בקשות (כמובן).
אלא אם יש לכם סיבה ספציפית להשאיר את xmlrpc.php פעיל, כדאי לבטל אותו.
למה xmlrpc.php מהווה סיכון אבטחה
המימוש של XML-RPC בוורדפרס אינו כולל הגבלת קצב בקשות, וגם לא מנגנון נעילה. שלושה וקטורי תקיפה מנצלים זאת:
1. הגברת מתקפות Brute-force: המתודה system.multicall מאפשרת לתוקף לארוז מאות ניסיונות התחברות בתוך בקשת HTTP אחת. תוספי אבטחה שעוקבים אחרי /wp-login.php כלל אינם רואים זאת.
המתודה system.multicall מאפשרת ביצוע מספר קריאות בבקשה אחת. תוקף יכול להשתמש בה כדי לנסות מאות סיסמאות בבת אחת, כשבלוגים של השרת מופיעה רק בקשת HTTP בודדת. – Perishable Press, "Protect Against WordPress Brute Force Amplification Attack"
2. הגברת מתקפות DDoS: תוקפים שולחים בקשות Pingback מזויפות דרך האתר שלכם, בכדי להציף את השרת של הקורבן בתעבורה. כך אלפי אתרי וורדפרס הופכים, בלי לדעת, למקורות תעבורה זדונית.
3. חשיפת כתובת ה-IP המקורית: בקשות Pingback מתבצעות בצד השרת ועוקפות שירותי CDN כמו Cloudflare. כלומר, כתובת ה-IP האמיתית של השרת שלכם נחשפת, גם כאשר Security Headers והגנת Proxy מוגדרים כהלכה. XML-RPC Brute Force הוא אחד מ-10 הממצאים הנפוצים במבדקי חדירה של וורדפרס.
עיינו במדריך תיקון ממצאי pentest לתשעת הממצאים הנוספים.
כיצד לבטל את xmlrpc.php
לפניכם שלוש שיטות. בחרו את השיטה שמתאימה לתצורת האחסון שלכם.
אפשרות א': חסימה ברמת השרת (מומלץ)
כך הבקשות כלל אינן מגיעות ל-PHP, ולכן זו הגישה היעילה ביותר.
Apache – הוסיפו לקובץ .htaccess:
<Files "xmlrpc.php">
Require all denied
</Files>Nginx – הוסיפו לבלוק ה-server ובצעו reload:
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
}אפשרות ב': ביטול באמצעות Must-Use Plugin
אם אין לכם גישה לעריכת הגדרות השרת (מצב נפוץ באחסון שיתופי), צרו את הקובץ wp-content/mu-plugins/disable-xmlrpc.php:
<?php
add_filter( 'xmlrpc_methods', '__return_empty_array' );
remove_action( 'wp_head', 'rsd_link' );הפילטר xmlrpc_enabled שמופיע במדריכים רבים חוסם רק מתודות שדורשות אימות. מתודות כמו Pingbacks ו-system.listMethods ממשיכות לעבוד, ולכן כדאי להשתמש ב-xmlrpc_methods במקום.
אפשרות ג': חסימה באמצעות תוסף אבטחה
תוספים כמו Wordfence, Sucuri ו-iThemes Security כוללים אפשרות לביטול XML-RPC. בדקו קודם בהגדרות ה-Firewall של התוסף שלכם, לפני שאתם מוסיפים חוקים ידניים.
| שיטה | רמה | עוצר PHP | מתאים ל |
|---|---|---|---|
| חוק .htaccess / Nginx | שרת | כן | VPS, שרת ייעודי, אחסון מנוהל |
MU-plugin (xmlrpc_methods) | PHP | לא | אחסון שיתופי |
| תוסף אבטחה | PHP | לא | אתרים שכבר מריצים תוסף אבטחה |
מה נשבר כשמבטלים את הקובץ
ברוב האתרים, שום דבר. החריגים העיקריים הם:
- Jetpack מסתמך על XML-RPC בכדי להתחבר ל-WordPress.com. אם אתם משתמשים ב-Jetpack, השאירו את XML-RPC פעיל או הוסיפו את טווחי ה-IP של Jetpack לרשימה הלבנה. (Jetpack משתמש באימות מבוסס טוקנים, כך שהוא בטוח יותר מ-XML-RPC רגיל.)
- אפליקציית וורדפרס לניידים – שיטות חיבור ישנות משתמשות ב-XML-RPC, אך הגרסאות החדשות של האפליקציה כבר עוברות ל-REST API כברירת מחדל.
- Pingbacks ו-Trackbacks מפסיקים לעבוד, וזה דווקא יתרון, מכיוון שהם ממילא מנוצלים כמעט רק לספאם.
כיצד לוודא שהביטול עובד
הריצו בדיקה מהירה מהטרמינל:
curl -s -o /dev/null -w "%{http_code}" https://yourdomain.com/xmlrpc.phpתגובת 403 מעידה שאותה חסימה ברמת השרת פעילה. אם השתמשתם בפילטר PHP, שלחו במקום זאת קריאת בדיקה:
curl -X POST https://yourdomain.com/xmlrpc.php
-H "Content-Type: text/xml"
-d '<?xml version="1.0"?><methodCall><methodName>system.listMethods</methodName></methodCall>'מערך מתודות ריק בתגובה מאשר שהפילטר xmlrpc_methods פעיל.
שאלות נפוצות
שאלות נפוצות לגבי ביטול XML-RPC בוורדפרס:
xmlrpc.php עדיין מופעל כברירת מחדל בכל התקנה חדשה. ליבת וורדפרס לא הסירה או ביטלה אותו, למרות שה-REST API החליף את הפונקציונליות שלו כבר בגרסה 4.7.xmlrpc_enabled חוסם רק מתודות שדורשות אימות, כמו פרסום פוסטים או העלאת מדיה. מתודות שאינן דורשות אימות, כמו pingback.ping ו-system.listMethods, ממשיכות לעבוד. הפילטר xmlrpc_methods, כשהוא מחזיר מערך ריק, משבית את כל המתודות, כולל אלו שאינן דורשות אימות.xmlrpc.php לחלוטין ברמת השרת. Jetpack משתמש ב-XML-RPC בכדי לתקשר עם WordPress.com. עם זאת, המימוש של Jetpack משתמש באימות מבוסס טוקנים ולא בפרטי התחברות רגילים, מה שהופך אותו לבטוח יותר מ-XML-RPC סטנדרטי. אם אתם מריצים Jetpack, השאירו את XML-RPC פעיל או הוסיפו את טווחי ה-IP של Jetpack לרשימה הלבנה בהגדרות השרת.xmlrpc.php סוגר את וקטור הגברת מתקפות ה-Brute-force, אך תוקפים עדיין יכולים לכוון ל-/wp-login.php ולנקודות אימות של ה-REST API. שלבו את ביטול XML-RPC עם אימות דו-שלבי (2FA), הגבלת ניסיונות התחברות וסיסמאות חזקות, בכדי לקבל הגנה מלאה.xmlrpc.php אינה מומלצת, מכיוון שעדכוני ליבה של וורדפרס ישחזרו אותו. במקום זאת, חסמו גישה ברמת השרת או השביתו את המתודות באמצעות פילטר PHP. גישות אלה שורדות עדכוני ליבה ואינן משנות את קובצי הליבה של וורדפרס./xmlrpc.php. ב-Apache הריצו grep xmlrpc.php /var/log/apache2/access.log | wc -l. ב-Nginx בדקו את /var/log/nginx/access.log. מספר גבוה של בקשות POST, במיוחד מכתובות IP שונות, מעיד על ניסיונות Brute-force או על הגברת DDoS.לסיכום
לרוב אתרי הוורדפרס אין סיבה אמיתית להשאיר את xmlrpc.php פעיל. חסמו אותו ברמת השרת אם יש לכם אפשרות, או השתמשו בפילטר xmlrpc_methods אם לא. בדקו עם curl שהכול עובד, והמשיכו הלאה (בין היתר).
רוצים לחזק עוד יותר את אבטחת האתר? עיינו במדריך חיזוק אבטחה באתרי וורדפרס.

