אבטחת אתר וורדפרס מתחילה בשלושה דברים פשוטים: גיבוי מלא שאפשר לשחזר ממנו, ליבה, תוספים ותבניות מעודכנים, וכניסת מנהל שמוגנת בסיסמה חזקה ובאימות דו-שלבי. רוב מה שבא אחר כך הוא הקשחה של מקומות ספציפיים, ואת זה עושים לפי סדר.
במדריך הזה ריכזתי את נקודות התורפה לפי הסדר שבו כדאי לבדוק אותן, ולכל אחת כתבתי איך מזהים שיש בעיה ואיך מתקנים אותה, בלי קיצורי דרך ובלי תוספים מיותרים. הכול מבוסס על התיעוד הרשמי של וורדפרס, ובמקומות שבהם יש המלצה על תוסף, הוא מופיע בשמו.
לפני שנוגעים במשהו, צריך גיבוי מלא של הקבצים ושל מסד הנתונים. כל שינוי ב-wp-config.php, בהרשאות או בתוספים יכול להפיל את האתר, וגיבוי טרי הוא מה שמחזיר אותו בדקות.
1. גיבוי: הבדיקה הראשונה של אבטחת אתר וורדפרס
כדי לדעת אם יש כאן בעיה, מספיק לענות על שלוש שאלות: מתי נלקח הגיבוי האחרון, איפה הוא שמור, והאם ניסית פעם לשחזר ממנו. אם אין לך תשובה לאחת מהן, זו הנקודה הראשונה לטפל בה.
התיעוד הרשמי של וורדפרס ממליץ לשמור צילומי מצב קבועים של כל ההתקנה, כולל קבצי הליבה ומסד הנתונים, במקום מהימן. גיבוי שנשמר רק על אותו שרת לא יעזור לך אם השרת עצמו נפגע, ולכן כדאי שעותק אחד יישב מחוץ לו. כדאי גם לברר מה מדיניות הגיבויים של חברת האחסון שלך, כדי לדעת על מה אפשר לסמוך ועל מה לא.
2. עדכונים של הליבה, התוספים והתבניות
את העדכונים שממתינים רואים ב-Dashboard ואז Updates: שם מופיע אם יש עדכון לוורדפרס, לתוספים או לתבניות. גם במסך Tools ואז Site Health מופיעות התראות כמו "You have plugins waiting to be updated".
לפי התיעוד של וורדפרס, בגרסאות ישנות חסרים תיקוני אבטחה, ולכן הן חשופות לפרצות מוכרות. מאז וורדפרס 5.5 אפשר להפעיל עדכון אוטומטי לכל תוסף בנפרד: נכנסים ל-Plugins ואז Installed Plugins, ובעמודה Automatic Updates לוחצים על Enable auto-updates. עדכון אוטומטי חוסך את השכחה, אבל הוא גם יכול להתנגש עם תוסף אחר. לכן הגיבוי מהסעיף הקודם הוא תנאי לכל עדכון, ידני או אוטומטי. פעם עדכון של וורדפרס שבר טופס באתר של לקוח שהיו לו קמפיינים פעילים, ולידים אבדו עד שתיקנתי את זה תוך 20 דקות.
ובאותה הזדמנות כדאי למחוק תוספים ותבניות שאינם פעילים. מסך Site Health מציג אותם תחת Inactive Plugins ו-Inactive Themes, והתיעוד ממליץ להסיר תבניות שלא מתכננים להשתמש בהן. קוד שיושב על השרת בלי שימוש עדיין יכול להיות נקודת כניסה.
3. כניסת מנהל: סיסמאות, שמות משתמש ואימות דו-שלבי
במסך Users כדאי לבדוק שלושה דברים: האם יש משתמש בשם admin, כמה משתמשים הם בתפקיד Administrator, והאם יש משתמשים שאתה לא מכיר.
המדריך של וורדפרס להגנה מפני ניסיונות פריצה בכוח (brute force) ממליץ לא להשתמש בשם המשתמש admin, להשתמש בסיסמאות חזקות וייחודיות עם מנהל סיסמאות, ולהפעיל אימות דו-שלבי לכל חשבונות המנהל. עוד המלצה שם היא להחזיק כמה שפחות מנהלים, ולתת לשאר תפקיד עם ההרשאות המינימליות שהם צריכים לעבודה היומיומית. ומשתמש שאתה לא מזהה הוא סיבה לבדוק את האתר לעומק, כי יצירת משתמשים לא מורשים מופיעה בתיעוד של וורדפרס כאחד הסימנים המובהקים לפריצה.
אם אתה לא משתמש ב-XML-RPC (שמשמש בעיקר אפליקציות וחיבורים חיצוניים ישנים), התיעוד ממליץ לנטרל אותו, כי הקובץ xmlrpc.php הוא יעד נפוץ לתקיפות. ויש עוד ערוץ שאנשים שוכחים: אם לא הגדרת רשומת SPF לדומיין שלך, מישהו יכול לשלוח מיילים שנראים כאילו יצאו ממך, כולל מיילים שמנסים לדוג פרטי כניסה מהעובדים שלך.
4. HTTPS וגרסת PHP
גם את זה רואים במסך Tools ואז Site Health. בלשונית Info יש שורה בשם "Is this site using HTTPS?", ובלשונית Status תופיע הודעה שמתחילה ב-"Your site is running on an older version of PHP" אם גרסת ה-PHP ישנה, או ב-"Your site is running on an outdated version of PHP" אם היא כבר לא מקבלת עדכוני אבטחה.
דף הדרישות של וורדפרס ממליץ על PHP בגרסה 8.3 ומעלה ועל תמיכה ב-HTTPS, ומציין שגרסאות ישנות שהגיעו לסוף חייהן עלולות לחשוף את האתר לפרצות. את גרסת ה-PHP מחליפים בדרך כלל בלוח הבקרה של חברת האחסון. לפני ההחלפה צריך גיבוי, ואחריה כדאי לעבור על האתר ולבדוק שהכול עובד, כי תוסף ישן עלול לא להסתדר עם גרסה חדשה.
כדי לחייב חיבור מוצפן בכל כניסה ובכל עבודה בממשק הניהול, מוסיפים את השורה הבאה ל-wp-config.php, מעל השורה שמתחילה ב-/* That's all, stop editing!:
define( 'FORCE_SSL_ADMIN', true );5. הקשחה של wp-config.php והרשאות קבצים
בתפריט הניהול יש שני עורכי קוד, Theme File Editor ו-Plugin File Editor. בתבניות קלאסיות הם נמצאים תחת Appearance ו-Plugins, ובתבניות בלוקים תחת Tools. אם העורך נפתח, מי שישיג גישת מנהל יוכל לערוך קוד PHP ישירות מהדפדפן, בלי FTP ובלי גישה לשרת.
כדי לסגור את זה, מוסיפים ל-wp-config.php, באותו מקום מעל שורת ה-stop editing, את השורה:
define( 'DISALLOW_FILE_EDIT', true );לפי התיעוד, זה מוסיף שכבת הגנה למקרה שתוקף השיג גישה לחשבון עם הרשאות גבוהות. לגבי הרשאות קבצים, מדריך ההקשחה של וורדפרס ממליץ על 755 לתיקיות, 644 לקבצים, ו-440 או 400 לקובץ wp-config.php. את ההרשאות משנים דרך תוכנת FTP או מנהל הקבצים של האחסון. ואם אתה לא בטוח מה המשמעות של כל מספר בשרת שלך, כדאי לשאול את חברת האחסון לפני שמשנים.
יש עוד נקודה שקל לפספס. אם הפעלת פעם WP_DEBUG_LOG כדי לחפש תקלה, קובץ הלוג נשמר כברירת מחדל ב-/wp-content/debug.log. התיעוד של וורדפרס מזהיר שקובץ לוג במקום ציבורי הוא סיכון אבטחה, ו-Site Health יציג במקרה כזה "Your site is set to log errors to a potentially public file". כשמסיימים לאבחן, מחזירים את WP_DEBUG ל-false. ובאותו עניין, כשאני מעדכן קובץ בשרת, אני מוחק אחר כך כל קובץ גיבוי שנשאר שם, כי גם אליו כל גולש יכול להגיע.
6. חומת אש ותוסף אבטחה: הגנה על אתר וורדפרס מבחוץ
אם אין לך שום שכבה שמסננת תעבורה לפני שהיא מגיעה לוורדפרס, ואין לך דרך לדעת שקובץ בליבה השתנה, אתה עובד בעיוורון.
יש שתי דרכים משלימות. הראשונה היא חומת אש ברמת הרשת או ה-CDN, כמו Cloudflare. המדריך הרשמי של וורדפרס מעדיף להגביל ניסיונות כניסה בשכבה הזו, כי היא עוצרת את התעבורה לפני שהיא מעמיסה על השרת. השנייה היא תוסף אבטחה בתוך וורדפרס. Wordfence הוא אחד התוספים שהתיעוד הרשמי מזכיר. לפי דף התוסף, יש בו חומת אש לאפליקציה, סורק תוכנות זדוניות שמשווה את קבצי הליבה, התוספים והתבניות למאגר של WordPress.org, הגבלת ניסיונות כניסה, אימות דו-שלבי ו-CAPTCHA בעמוד הכניסה. רק כדאי לדעת שבגרסה החינמית של Wordfence, חוקי חומת האש וחתימות הסריקה מגיעים באיחור של 30 יום לעומת הגרסה בתשלום.
אחרי שמתקינים תוסף אבטחה, כדאי לבדוק שאתה עדיין מצליח להיכנס מכל מכשיר שאתה עובד ממנו. אם התוסף נעל אותך בחוץ, אפשר לנטרל אותו בלי גישה לממשק: נכנסים ב-FTP או במנהל הקבצים לתיקייה wp-content/plugins ומשנים את שם התיקייה של התוסף. וורדפרס לא ימצא אותו ויכבה אותו.
כשההקשחה כבר לא מספיקה
אם האתר הוא חנות, האבטחה לא נגמרת בהקשחה של וורדפרס. יש גם את הצד של ההזמנות עצמן, ושם כדאי להכיר את המדריך איך למנוע הונאות אשראי באתר איקומרס חדש. ואם אתה רוצה להסתכל מעבר לוורדפרס, על ההגנה של העסק כולו, כתבתי על זה מדריך נפרד על אבטחת מידע לעסק קטן.
יש מצבים שבהם כבר לא מדובר בהקשחה אלא בטיפול בפריצה. התיעוד של וורדפרס מונה כמה סימנים ברורים לפריצה: גוגל מסמנת את האתר כמסוכן, חברת האחסון השביתה אותו, מבקרים מדווחים שהאנטי-וירוס שלהם חוסם אותו, או שנוצרו משתמשים שלא יצרת. אם אתה רואה אחד מהם, כדאי להפסיק את ההקשחה, לגבות את האתר במצב הנוכחי כמו שהוא, ולפנות לגורם מקצועי.
כדאי לקרוא למומחה גם כשאתה לא בטוח מה שינוי בהרשאות או בגרסת PHP יעשה לאתר, כשהאתר הוא חנות שכל שעת השבתה שלה עולה כסף, או כשאין לך גיבוי שאתה בטוח שאפשר לשחזר ממנו. ואם אתה מתלבט גם למה האתר לא מקבל חשיפה, כדאי לקרוא את למה האתר שלי לא מופיע בגוגל, כי אתר שנפרץ ומסומן אצל גוגל הוא אחת הסיבות לכך.
את ההמלצות המלאות אפשר למצוא במדריך ההקשחה הרשמי של וורדפרס. ואם ניסית לבד ולא הצלחת, או שאתה פשוט מעדיף שמישהו יעבור על האתר בשבילך, דבר איתי ואני אטפל בזה.
שאלות נפוצות
האם להפעיל עדכונים אוטומטיים לתוספים?
זה חוסך את השכחה, ולכן זו ברירת מחדל טובה לרוב התוספים. התנאי הוא שיש לך גיבוי קבוע, כי עדכון יכול להתנגש עם תוסף אחר. את ההגדרה מפעילים ב-Plugins תחת העמודה Automatic Updates.
מה עושה DISALLOW_FILE_EDIT?
השורה הזו ב-wp-config.php מכבה את עורכי הקוד של התבניות והתוספים בממשק הניהול. כך, גם אם מישהו השיג גישה לחשבון מנהל, הוא לא יוכל לערוך קבצי PHP ישירות מהדפדפן. את העריכות שאתה עצמך צריך תעשה דרך FTP או מנהל הקבצים.
איך אני יודע אם האתר שלי כבר נפרץ?
סימנים מובהקים הם אזהרה של גוגל על האתר, השבתה של חברת האחסון, חסימה בתוכנות אנטי-וירוס של מבקרים, משתמשים חדשים שלא יצרת, או תוכן זר שמופיע בעמודים. במקרה כזה ההקשחה מחכה, וקודם מטפלים בפריצה.
