מדריך · 3 דקות קריאה

איך מאבטחים את ההתחברות לוורדפרס

בקצרה: תנו לכל מנהל סיסמה ארוכה וייחודית ואימות דו־שלבי, הגבילו כמה ניסיונות התחברות כתובת אחת יכולה לבצע, והסירו חשבונות מנהל שאף אחד לא משתמש בהם. ליבת וורדפרס לא מגבילה ניסיונות התחברות בעצמה, אז הוסיפו מגבלה בשרת, ב־CDN או בתוסף. שינוי כתובת ההתחברות לבדו הוא לא הגנה.

עודכן ב־ · HackGrade

בדקו קודם את האתר שלכם. הסריקה החינמית מראה אילו מהתיקונים האלה אתם צריכים. סריקת אבטחה לוורדפרס

שלבים בקצרה

  1. נקו את חשבונות המנהל. הסירו מנהלים שלא בשימוש ותנו לשאר את התפקיד הנמוך ביותר שמספיק.
  2. הפעילו אימות דו־שלבי. השתמשו באפליקציית TOTP עם קודי גיבוי לכל מנהל ועורך.
  3. הגבילו את קצב wp-login.php. הגבילו ניסיונות לכל כתובת IP בשרת, ב־CDN או בתוסף.
  4. הגבילו או סגרו דלתות נוספות. חסמו את XML-RPC אם אינו בשימוש ובדקו את סיסמאות האפליקציה.
  5. נתקו חיבורים גנובים. בכל חשד, החליפו את המפתחות הסודיים כדי שכל חיבור יסתיים.

הקוד וההגדרות נשארים באנגלית.

למה דף ההתחברות הוא הדלת הראשית

בוטים מנסים סיסמאות נפוצות וסיסמאות שדלפו מול /wp-login.php ו־/xmlrpc.php כל היום, כמעט בכל אתר וורדפרס. רובם מצליחים לא בזכות תחכום, אלא כי סיסמה שימשה גם באתר אחר שדלף. סיסמת מנהל גנובה אחת מספיקה כדי להתקין תוסף זדוני, ולכן ההתחברות צריכה כמה שכבות הגנה.

1. נקו את חשבונות המנהל

הציגו את כל מי שיש לו שליטה מלאה, והסירו או הורידו בדרגה את מי שלא צריך אותה. כותבי תוכן כמעט אף פעם לא צריכים יותר מתפקיד עורך או כותב.

Terminal
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered

לכל אדם חשבון משלו (בלי התחברות משותפת „admin”) וסיסמה ארוכה וייחודית ממנהל סיסמאות. אם באתר עדיין יש משתמש שנקרא ממש admin, צרו מנהל חדש, העבירו אליו את התוכן ומחקו את הישן.

2. הפעילו אימות דו־שלבי

התחברות דו־שלבית עוצרת את רוב התקיפות עם סיסמאות גנובות, כי התוקף צריך גם קוד מהטלפון של המשתמש. התוסף החינמי Two Factor ממאגר התוספים של WordPress.org תומך באפליקציות אימות (TOTP), בקודים בדוא״ל ובקודי גיבוי. התקינו אותו, וכל משתמש מפעיל אותו תחת משתמשים ← פרופיל. העדיפו אפליקציית אימות על פני קודים בדוא״ל, תנו למשתמשים את קודי הגיבוי, וחייבו אותו לכל מנהל ועורך. אם אתם כבר משתמשים בחבילת אבטחה, רבות מהן מציעות את אותה יכולת.

3. הגבילו ניסיונות התחברות

ליבת וורדפרס לא מגבילה התחברויות שנכשלו, כך שבוטים יכולים לנסות בלי סוף. המקום הטוב ביותר לעצור אותם הוא לפני ש־PHP רץ. ב־nginx, הגבלת קצב על דף ההתחברות מעבירה משתמשים אמיתיים ומאטה בוטים:

nginx
# in the http { } block
limit_req_zone $binary_remote_addr zone=wplogin:10m rate=10r/m;

# in the server { } block, above your general PHP location
location = /wp-login.php {
    limit_req zone=wplogin burst=5 nodelay;
    limit_req_status 429;
    # then the same fastcgi lines as in your location ~ \.php$ block, e.g.:
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass unix:/run/php/php-fpm.sock;
}

בדקו את זה באתר שלכם; אחרי כמה בקשות מהירות אתם אמורים לראות 429:

Terminal
for i in $(seq 1 20); do curl -s -o /dev/null -w '%{http_code} ' -X POST https://yourdomain.com/wp-login.php; done; echo

מאחורי Cloudflare, כלל rate limiting לנתיב /wp-login.php עושה את אותו הדבר בקצה הרשת. באחסון משותף בלי גישה לשרת, תוסף מוכר להגבלת ניסיונות התחברות הוא הבחירה המעשית.

4. אפשרו התחברות רק מכתובות מוכרות (לא חובה)

אם כל מי שמתחבר עובד מכתובות IP קבועות, אפשר לסגור את דף ההתחברות לכל השאר. ב־Apache 2.4, בקובץ .htaccess:

.htaccess
<Files "wp-login.php">
    Require ip 203.0.113.10 198.51.100.0/24
</Files>

אל תחסמו את /wp-admin/admin-ajax.php: תבניות ותוספים רבים משתמשים בו עבור מבקרים. דלגו על השלב הזה אם הצוות מתחבר מרשתות משתנות או אם לקוחות מתחברים לחנות; השתמשו במקום זה באימות דו־שלבי ובהגבלת קצב.

5. סגרו את הדלתות האחרות

XML-RPC הוא ממשק מרוחק ישן שגם הוא מקבל סיסמאות. אם אתם לא משתמשים באפליקציית וורדפרס לנייד או ב־Jetpack, חסמו אותו כמו שמתואר ברשימת הקשחת וורדפרס. סיסמאות אפליקציה מאפשרות לכלים חיצוניים להשתמש ב־REST API; בדקו אותן תחת משתמשים ← פרופיל ובטלו כל אחת שאתם לא מזהים. אם שום דבר לא משתמש בהן, כבו את היכולת עם תוסף must-use קטן:

PHP
<?php
// wp-content/mu-plugins/no-app-passwords.php
add_filter( 'wp_is_application_passwords_available', '__return_false' );

6. אם אתם חושדים שסיסמה נגנבה

החליפו את הסיסמה, ואז החליפו את המפתחות הסודיים ב־wp-config.php. זה מנתק כל חיבור בכל מכשיר, כולל של תוקף:

Terminal
wp config shuffle-salts

אחר כך חפשו מנהלים או תוספים שלא אתם הוספתם, כמו שמתואר במדריך איך יודעים שאתר הוורדפרס נפרץ.

ומה עם הסתרת כתובת ההתחברות?

העברת wp-login.php לכתובת סודית מפחיתה רעש של בוטים ביומנים, אבל היא לא הגנה: הכתובת דולפת דרך קישורים ותוספים, והיא לא עוזרת בכלל מול סיסמה שדלפה. השתמשו בה כתוספת, אחרי אימות דו־שלבי והגבלת קצב.

מה HackGrade בודקת

הסריקה החינמית מסמנת שמות משתמש שוורדפרס חושפת לכולם, נקודת XML-RPC פתוחה, וליבת וורדפרס, תוספים ותבניות לא מעודכנים עם פגיעויות מוכרות. היא אף פעם לא מנסה לנחש סיסמאות, גם לא בסריקה המעמיקה.

שאלות נפוצות

האם וורדפרס מגבילה ניסיונות התחברות כברירת מחדל?

לא. ליבת וורדפרס לא מגבילה התחברויות שנכשלו. הוסיפו מגבלה בשרת, ב־CDN או בתוסף.

באיזו שיטת אימות דו־שלבי כדאי להשתמש בוורדפרס?

אפליקציית אימות (TOTP) עם קודי גיבוי שמורים. קודים בדוא״ל עדיפים על כלום, אבל מי שנכנס לתיבת הדואר מקבל גם את הקוד.

כדאי לשנות את כתובת wp-admin?

זה מפחית רעש של בוטים, אבל לא עוצר תוקף נחוש או סיסמה שדלפה. עשו את זה רק בנוסף לאימות דו־שלבי ולהגבלת קצב.

הגבלת קצב תנעל את הלקוחות שלי בחוץ?

לא עם מגבלה סבירה, כמו 10 ניסיונות בדקה עם מרווח קטן. אנשים אמיתיים כמעט אף פעם לא מתחברים יותר מכמה פעמים בדקה.

מקורות

מדריכים קשורים

חינם · מיידי · בלי הרשמה

גלו את הציון שלכם לפני שמישהו אחר יגלה.

סריקה פסיבית בלבד. שום בדיקה חודרנית לא מתבצעת בלי האישור שלכם.

מתחילים בחינם. Pro מ־29$ לחודש (כ־24$ בחיוב שנתי), או דוח מלא חד־פעמי ב־29$. למחירים