WP_DEBUG בסביבת ייצור: למה זה מסוכן ומה במקום

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

WP_DEBUG הוא מצב פיתוח של WordPress שגורם לכל שגיאה, אזהרה או notice של PHP להופיע ישירות בתוך דפי ה-HTML. בסביבת פיתוח זה כלי חיוני. בייצור זוהי טעות אבטחה מסוכנת שחושפת את האתר במספר דרכים בו זמנית.

למה זה משנה

שלוש בעיות ברורות עולות מ-WP_DEBUG פעיל בייצור: חשיפת מידע לתוקפים - הודעת שגיאה אופיינית מציגה נתיב מלא בשרת ('/var/www/html/wp-content/plugins/X/inc/Y.php on line 123'), שם תוסף, גרסת PHP, ולעיתים גם משתנים מהקוד עם נתונים רגישים. תוקף שמטרגט את האתר משתמש במידע הזה כדי לאתר ספריית התקנה, גרסה פגיעה, או שמות קבצים פנימיים שיכולים לשמש בהתקפת LFI. חוויית משתמש שבורה - הודעות PHP במקום תוכן או בראש הדף הופכות את האתר לבלתי מקצועי, מורידות אמון, וגורמות לכשלון בתשלומים אם השגיאה מופיעה לפני header(). השפעה על SEO - Google סורק שגיאות PHP כתוכן רגיל וזה מוריד את ציון האיכות. בנוסף, כל שגיאת PHP - גם notice קטן - דורשת זמן עיבוד. אתר עם מאות notices לעמוד יורץ לאט יותר ב-15-30%.

איך לזהות

הבדיקה קוראת את wp-config.php ובודקת את הערך של WP_DEBUG. אם הוא true - הבדיקה אדומה. ידנית: פתח את wp-config.php וחפש 'WP_DEBUG'. אם השורה היא define('WP_DEBUG', true); - יש בעיה. בנוסף בדוק WP_DEBUG_DISPLAY: אפילו אם WP_DEBUG הוא true, הצגה למשתמש צריכה להיות false. גם בדיקה מעשית: גש לעמוד אקראי באתר עם פרמטר GET לא חוקי (?page=)(asdf=) - אם רואה שגיאות PHP, debug פעיל.

איך לתקן

  1. פתח את wp-config.php דרך FTP/SFTP או File Manager.
  2. מצא את השורה define('WP_DEBUG', true); - שנה ל-false או מחק לחלוטין.
  3. הוסף הגדרות מומלצות לייצור:
    define('WP_DEBUG', false);
    define('WP_DEBUG_LOG', false);
    define('WP_DEBUG_DISPLAY', false);
    @ini_set('display_errors', 0);
  4. אם אתה צריך לעקוב אחרי שגיאות בלי להציג למבקרים:
    define('WP_DEBUG', true);
    define('WP_DEBUG_LOG', true);    // כותב ל-wp-content/debug.log
    define('WP_DEBUG_DISPLAY', false); // לא מציג למבקרים
    @ini_set('display_errors', 0);
  5. אם השארת WP_DEBUG_LOG פעיל, ודא ש-debug.log לא נגיש מ-HTTP - הוסף ב-.htaccess
    <Files debug.log>
        Require all denied
    </Files>
  6. שמור את wp-config.php והעלה. רענן את האתר במצב גלישה פרטית.
  7. בדוק כמה דפים. אמור להיות נקי משגיאות PHP מוצגות.

טעויות נפוצות

אל תשאיר WP_DEBUG_DISPLAY ל-true 'רק לכמה ימים' - אדמינים שוכחים. אל תכתוב את השגיאות ל-debug.log בלי להגן על הקובץ - debug.log שנגיש ב-HTTP חושף את אותו מידע שניסית להסתיר. אל תתעלם מהודעת 'Cannot modify header information' שמופיעה גם אחרי הכיבוי - היא נובעת ממשהו אחר ויש לאתר את המקור (לרוב פלט של whitespace בתחילת קובץ functions.php). אל תפעיל WP_DEBUG בייצור 'כדי לראות מה הבעיה' בלי להפעיל את WP_DEBUG_DISPLAY = false - אתה חושף את הבעיה לעולם.

בדיקה לאחר תיקון

פתח את האתר במצב גלישה פרטית, רענן 5-10 דפים שונים. אל תופיע שום שגיאה PHP. נסה גם דפים שיש בהם טפסים, תגובות או checkout. בדוק את HTML view-source - אסור שיהיו שורות שמתחילות ב-'Notice:', 'Warning:', 'Deprecated:', 'Fatal error:'. אם השארת WP_DEBUG_LOG, בדוק שה-debug.log גודל לא גדל באופן בלתי שגרתי.

טיפ: אם debug.log גדל מהר (מעל 5MB בשבוע), זה סימן שהאתר זורק שגיאות בכמויות. הפעל Query Monitor (תוסף חינמי) במצב staging כדי לאתר את המקור - לרוב מדובר בתוסף ישן עם syntax לא תואם PHP 8.