קידומת ברירת המחדל של בסיס הנתונים ב-WordPress היא wp_ - wp_posts, wp_users, wp_options. כל בוט מתקדם מנחש את השמות האלה כשהוא מנסה לנצל פגיעות SQL Injection. שינוי הקידומת ל-ערך לא צפוי לא חוסם SQLi, אבל הופך כל exploit גנרי לבלתי שימושי.
למה זה משנה
פגיעויות SQL Injection בתוספי WordPress מתפרסמות מספר פעמים בחודש. בחלקן, התוקף יכול לבצע UNION SELECT אבל אינו מקבל אוטומטית את שמות הטבלאות - הוא חייב לנחש. אם הקידומת היא wp_, הניחוש הראשון הוא wp_users (לקבלת hashes של סיסמאות) או wp_options (לקריאת ההגדרות הסודיות של האתר). אם הקידומת אקראית - xyz_ או sk29_ - התוקף צריך פגיעות נוספת רק כדי לזהות שמות טבלאות. בחלק גדול מההתקפות הזה מספיק כדי שהבוט יוותר ויעבור לאתר הבא. שינוי הקידומת הוא 'security through obscurity' מובהק - הוא לא חוסם תוקף ממוקד שיודע מי האתר, אבל מקטין את אחוז הסריקות האוטומטיות שמצליחות. שווה את המאמץ כי העלות נמוכה והשינוי מבוצע פעם אחת.
איך לזהות
הבדיקה קוראת את $table_prefix מ-wp-config.php ובודקת אם הערך הוא wp_ או wordpress_ - שתי הקידומות הברירת מחדל. אם כן - הבדיקה אדומה. ידנית: פתח את wp-config.php וחפש 'table_prefix' - אם הערך הוא 'wp_' או דומה לו, יש מקום לשפר.
איך לתקן
- גבה את כל בסיס הנתונים ואת wp-config.php. שינוי קידומת שנעצר באמצע משאיר את האתר לא תקין.
- בצע באתר staging קודם - העתק של ההפקה. ודא שהאתר עובד ב-staging אחרי השינוי.
- הדרך הקלה: התקן את התוסף 'Brozzme DB Prefix Change' או 'Change DB Prefix'. בחר קידומת חדשה (4-6 תווים אקראיים, כמו xyz_ או a8b2_), לחץ Run, והתוסף ישנה את wp-config.php וגם ירחיב את הטבלאות בעצמו.
- הדרך הידנית: שנה את wp-config.php מ-$table_prefix = 'wp_'; ל-$table_prefix = 'xyz_';
- פתח phpMyAdmin (או SSH עם mysql) והרץ RENAME TABLE על כל ~12 הטבלאות. דוגמת SQL:
RENAME TABLE wp_commentmeta TO xyz_commentmeta; RENAME TABLE wp_comments TO xyz_comments; RENAME TABLE wp_links TO xyz_links; RENAME TABLE wp_options TO xyz_options; RENAME TABLE wp_postmeta TO xyz_postmeta; RENAME TABLE wp_posts TO xyz_posts; RENAME TABLE wp_termmeta TO xyz_termmeta; RENAME TABLE wp_terms TO xyz_terms; RENAME TABLE wp_term_relationships TO xyz_term_relationships; RENAME TABLE wp_term_taxonomy TO xyz_term_taxonomy; RENAME TABLE wp_usermeta TO xyz_usermeta; RENAME TABLE wp_users TO xyz_users; - עדכן ערכים בטבלאות שמכילים את הקידומת בתוכן:
UPDATE xyz_options SET option_name = 'xyz_user_roles' WHERE option_name = 'wp_user_roles'; UPDATE xyz_usermeta SET meta_key = REPLACE(meta_key, 'wp_', 'xyz_') WHERE meta_key LIKE 'wp_%'; - בדוק את האתר. נסה להתחבר. בדוק שכל התוספים מתפקדים.
טעויות נפוצות
אל תשנה רק את wp-config.php בלי לשנות את שמות הטבלאות - האתר יחזיר 'Error establishing a database connection' כי WordPress יחפש טבלאות בשם xyz_users שלא קיימות. אל תפספס את שלב ה-UPDATE על user_roles ו-usermeta - בלי זה אדמינים לא יקבלו את ההרשאות וייכנסו כ-subscribers. אל תבחר קידומת ארוכה מדי (8+ תווים) - חלק מבסיסי הנתונים מגבילים אורך טבלה ל-64 תווים, ועם קידומת ארוכה תוספים שיוצרים טבלאות עם שמות ארוכים יישברו. אל תיתן קידומת שמכילה הירוגליפים, מקפים או רווחים - SQL רגיש לזה.
בדיקה לאחר תיקון
הרץ שוב את האודיט. ידנית: SHOW TABLES ב-phpMyAdmin אמור להציג את כל הטבלאות עם הקידומת החדשה. נסה להתחבר כמנהל - אמור לעבוד. בדוק שהפוסטים, התגובות והמדיה מופיעים. הריץ את התוספים העיקריים לוודא תפקוד.