הצד המעשי של מאמר האבטחה: צעדי הגנה מקובלים עם קוד מוכן, שמקטינים את הסיכון עוד לפני שקורה משהו
קראתם שאבטחה היא הבסיס לאמון, עכשיו נקטין את הסיכון בפועל. אלה צעדי הקשחה הגנתיים ומקובלים, עם קוד מוכן להעתקה, שסוגרים את הדלתות הנפוצות ביותר עוד לפני שמישהו מנסה. כל סעיף כולל דירוג השפעה וסיכון, כדי שתדעו מאיפה להתחיל ומה דורש זהירות.
| פעולה | השפעה | סיכון |
|---|---|---|
| עדכונים וגיבוי | 🟢 גבוהה | 🟢 בטוח |
| כפיית HTTPS | 🟢 גבוהה | 🟡 לבדוק |
| אבטחת התחברות | 🟢 גבוהה | 🟢 בטוח |
| חומת אש (WAF) | 🟢 גבוהה | 🟢 בטוח |
| הרשאות קבצים | 🟡 בינונית | 🟡 לבדוק |
| ביטול עריכת קבצים | 🟡 בינונית | 🟢 בטוח |
| חסימת PHP בהעלאות | 🟡 בינונית | 🟡 לבדוק |
| כותרות אבטחה | 🟡 בינונית | 🟡 לבדוק |
| ביטול XML-RPC | 🟡 בינונית | 🟡 לבדוק |
| הסתרת גרסה | ⚪ נמוכה | 🟢 בטוח |
כי המטרה היא להבין מה באמת מוסיף אבטחה. תוסף אבטחה טוב מרכז חלק גדול מהפעולות האלה, וזה מצוין, אבל כשמבינים את העיקרון אפשר גם לבדוק שהוא באמת עושה את העבודה, ולא לסמוך עליו בעיניים עצומות.
הכלל הראשון באבטחה: אם יש לכם גיבוי תקין, כמעט כל תקלה הפיכה. לפני שנוגעים בקוד, ודאו שיש גיבוי מלא ועדכני של הקבצים ומסד הנתונים, ורצוי אוטומטי (ראו הסעיף הבא). כך, אם קטע כלשהו שובר משהו, פשוט משחזרים וממשיכים.
למה עושים את זה: רוב הפריצות מנצלות תוסף, תבנית או ליבה שלא עודכנו. לכן עדכון וגיבוי הם ההגנות עם ההחזר הגבוה ביותר. הפעילו עדכוני ליבה אוטומטיים, ב-wp-config.php:
define( 'WP_AUTO_UPDATE_CORE', true );
גישת D-Office לתוספים ותבניות: דווקא כאן לא מומלץ עדכון אוטומטי גורף לעסק, כי עדכון של תוסף עלול לשבור פונקציונליות. עדיף: להפעיל עדכון אוטומטי בררני (דרך מתג העדכון האוטומטי המובנה בניהול, לכל תוסף בנפרד) רק לתוספים פשוטים ולא-קריטיים, ולעדכן ידנית ואחרי בדיקה את התוספים הקריטיים או המותאמים אישית, רצוי בסביבת בדיקה.
גיבוי: הפעילו גיבוי אוטומטי דרך תוסף מוכר (למשל UpdraftPlus) ליעד חיצוני בענן, לא רק על אותו שרת.
למה עושים את זה: בלי HTTPS הדפדפן מסמן "אתר לא מאובטח" והמידע עובר גלוי. כפייה מוודאת שכל מבקר מגיע לגרסה המאובטחת. לכפיית HTTPS על אזור הניהול, ב-wp-config.php:
define( 'FORCE_SSL_ADMIN', true );
ולהפניית כל התעבורה מ-http ל-https (Apache), ב-.htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>מתי לא להשתמש: רק לאחר שיש תעודת SSL תקינה ומותקנת. כפייה בלי תעודה תנעל את האתר. בשרתי Nginx ההפניה מוגדרת בקונפיג השרת.
למה עושים את זה: מסך ההתחברות הוא היעד מספר אחת להתקפות ניחוש סיסמה. שלוש הגנות משלימות: הגבלת ניסיונות התחברות (תוסף כמו Limit Login Attempts Reloaded חוסם כתובת IP אחרי כמה כישלונות), סיסמאות חזקות וייחודיות, ואימות דו-שלבי (2FA) דרך תוסף ייעודי. שלושתם יחד הופכים ניחוש סיסמה למעשית בלתי אפשרי.
מתי לא להשתמש: אל תגדירו הגבלה אגרסיבית מדי שתנעל אתכם עצמכם בחוץ. ודאו גישה חלופית (FTP או מסד נתונים) למקרה כזה.
למה עושים את זה: הרשאות נכונות מונעות מתהליך או תוקף לכתוב לקבצים שאסור לגעת בהם. הכלל המקובל: תיקיות 755, קבצים 644, ו-wp-config.php מחמיר יותר (640). אין קוד PHP כאן, זו פעולה ברמת השרת דרך FTP, מנהל הקבצים באחסון, או SSH:
# תיקיות: 755
find /path/to/wordpress/ -type d -exec chmod 755 {} \;
# קבצים: 644
find /path/to/wordpress/ -type f -exec chmod 644 {} \;
# wp-config מחמיר יותר
chmod 640 wp-config.phpמתי לא להשתמש: לעולם לא 777. אם אינכם בקיאים, הגדירו דרך לקוח FTP (לחיצה ימנית, הרשאות) לפי הערכים למעלה, או בקשו מהאחסון. הרשאות שגויות עלולות לשבור העלאות או את האתר.
למה עושים את זה: וורדפרס מאפשר כברירת מחדל לערוך קבצי תבנית ותוסף מהניהול. אם תוקף משיג גישת אדמין, זו דלת פתוחה להזרקת קוד. ב-wp-config.php:
define( 'DISALLOW_FILE_EDIT', true );
מתי לא להשתמש: אם אתם נשענים על העורך המובנה לעבודה שוטפת. עדיף בכל מקרה לערוך דרך Child Theme או FTP.
למה עושים את זה: תיקיית wp-content/uploads מיועדת לתמונות וקבצים, לא לקוד. אם תוקף מצליח להעלות לשם קובץ PHP זדוני, חסימת הרצת PHP בתיקייה מונעת ממנו לרוץ. ב-Apache, צרו קובץ .htaccess בתוך תיקיית ההעלאות:
# הקובץ: wp-content/uploads/.htaccess <Files *.php> Require all denied </Files>
מתי לא להשתמש: אם תוסף לגיטימי מריץ PHP מתוך uploads (נדיר). ב-Nginx הכלל מוגדר בקונפיג השרת. אם משהו נשבר, הסירו את הקובץ.
למה עושים את זה: כותרות אבטחה אומרות לדפדפן איך להתנהג בבטחה: למנוע הטמעה במסגרת זרה (Clickjacking), למנוע ניחוש סוגי קבצים, ולאכוף HTTPS. ב-.htaccess (Apache):
<IfModule mod_headers.c> Header set X-Content-Type-Options "nosniff" Header set X-Frame-Options "SAMEORIGIN" Header set Referrer-Policy "strict-origin-when-cross-origin" Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" </IfModule>
HSTS דורש זהירות: הוסיפו את Strict-Transport-Security רק כש-HTTPS עובד מצוין בכל האתר. חשוב לדעת שהוא "דביק": ברגע שהדפדפן קיבל אותו, הוא יתעקש על https למשך התוקף שהוגדר (כאן שנה), וקשה מאוד לבטל את זה אצל מבקרים שכבר קיבלו אותו.
CSP היא אחת מכותרות האבטחה החזקות ביותר, אבל גם אחת הקלות ביותר לשבור איתה אתר (היא יכולה לחסום סקריפטים, גופנים ותמונות לגיטימיים). היא דורשת התאמה פרטנית וזהירה לכל אתר, ולכן בכוונה השארנו אותה מחוץ למדריך הכללי.
למה עושים את זה: XML-RPC הוא ממשק ישן שמשמש לעיתים קרובות להתקפות ניחוש סיסמה מוגברות ולעומס. ברוב האתרים החדשים כבר לא צריך אותו, ואפשר לבטלו בבטחה. ב-functions.php:
add_filter( 'xmlrpc_enabled', '__return_false' );
מתי לא להשתמש: אם אתם משתמשים ב-Jetpack, באפליקציית וורדפרס לנייד, או באינטגרציה שמפרסמת לאתר מרחוק, הם עשויים להזדקק לו. במקרה כזה עדיף תוסף אבטחה שמגביל אותו במקום לבטל לגמרי.
למה עושים את זה: וורדפרס חושף כברירת מחדל את מספר הגרסה בקוד העמוד, מה שמקל על תוקף לחפש חולשות מתאימות. שקיפות מלאה: זו לא שכבת אבטחה אמיתית, רק צמצום מידע זמין. הרווח קטן, אבל בטוח לחלוטין. ב-functions.php:
remove_action( 'wp_head', 'wp_generator' ); add_filter( 'the_generator', '__return_empty_string' );
אין כאן קוד, אבל זו הגנה חשובה. חומת אש לאתר (WAF, למשל דרך Wordfence או שירות כמו Cloudflare) יושבת לפני האתר ומסננת תעבורה זדונית עוד לפני שהיא מגיעה אליו: ניסיונות פריצה מוכרים, בוטים, והצפות. היא גם סורקת את האתר לאיתור קבצים חשודים.
למה היא לא מחליפה עדכונים: WAF חוסמת התקפות מוכרות, אבל היא לא מתקנת את החולשה עצמה. אם תוסף לא מעודכן, החור עדיין שם. לכן WAF היא שכבה נוספת על עדכונים, גיבוי והקשחה, לא תחליף להם.
אחרי כל שינוי: בדקו שהאתר תקין, ובמיוחד שאתם עדיין מצליחים להתחבר, ושטפסים ותשלום עובדים. בדקו את האתר ב-securityheaders.com, וודאו שהגיבוי רץ. עבדו קטע-קטע, ואם משהו נשבר, הסירו את האחרון. לסיום, צ'קליסט מהיר:
אנחנו מטמיעים הקשחה, עדכונים, גיבוי אוטומטי ותוסף אבטחה, ובודקים שהכול עובד, כדי שהאתר יהיה בטוח בלי שיישבר דבר.
בואו נדבר