האם וורדפרס מאובטחת מספיק?

הסבר פשוט שעושה סדר בעולם האבטחה עבור אלו שרוצים לבנות את האתר שלהם.
ציטוטים אמיתיים מתוך ההרצאה של ענב גנד-גלילי. נוצר על ידי עבגד יבאור ופורסם במקור בסרטן בגב האומה

אבטחה והגנה מפני גניבת מידע, השחתת האתר וצרות נוספות הם דברים שמטרידים את כל אלו שמשתמשים באינטרנט, אבל במיוחד את אלו שבונים את האתר שלהם באמצעות מתכנת ותוהים מה יותר מאובטח – וורדפרס? דרופל? אתר שנבנה ב-JAVA? אולי בדוט.נט?
התשובה לשאלה הזו היא קצרה ופשוטה: למעט מקרי קיצון – אין שום קשר בין השפה שבה האתר נבנה לבין האבטחה שלו ואין שום הבדל בין פלטפורמות שונות מבחינת אבטחת הנתונים והגנה מפני השחתת האתר.
ההסבר הוא כמובן יותר ארוך. ראשית, חשוב לי להבהיר שאני לא כותב 'מהפוזיציה'. אני לא בונה אתרים או מפתח אתרים עבור לקוחות וכן אני עובד על מגוון שפות ופלטפורמות כאשר אני מתמקד בעבודה השוטפת שלי בטכנולוגיות שהן לא וורדפרס או בכלל קשורות ל-PHP (שזו השפה שבה וורדפרס כתובה). המאמר מיועד לאנשים ששוכרים מתכנת/בונה אתר על מנת לבנות להם אתר ומוטרדים מנושא האבטחה.

אז בואו נדבר מעט על אבטחה – בגדול כשאנחנו מדברים על 'אבטחה' אנחנו מדברים על הגנה משני דברים – הראשון הוא 'השחתה' של פני האתר. לקום בבוקר ולראות למשל שהאתר אינו מכיל יותר את התוכן שלו אלא תמונה של לוחם פלסטיני גאה שקופץ דרך גלגל אש עם כיתוב בערבית וצלילי מוזיקה ים תיכונית כלשהי. השני הוא יותר חמור ובו מדובר על פריצה של ממש למערכת האתר שמתבטאת בדרך כלל בהשתלת תוכן (בד"כ פרסומות) או בגניבת נתונים. ניתן לערוך את המתקפות האלו במגוון דרכים (במאמר הזה פירטתי על חלק מהן).

האם יש שפת תכנות בטוחה יותר?

כל שפת תכנות מודרנית כלשהי – מ-PHP ועד JAVA, מרובי ועד Node.js יודעת להתמודד עם סיכוני האבטחה האלו. כך למשל, אם אנו רוצים להגן על עצמנו מהתקפת XSS, שבה התוקף שותל סקריפט קטן בתוך האתר, לכל שפה יש פונקציות/מודולים שיכולים למנוע את השתלת הסקריפט. כלומר, זה לא באמת משנה אם אני כותב ב-PHP או ב-Node.js או בכל שפה אחרת – כל עוד אני יודע לכתוב קוד מאובטח אני יכול לעשות את זה. וזה לא משנה באמת אם אני עושה סניטציה באמצעות sanitize HTML ב-Node.js או שאני משתמש ב-Sanitize filter שיש ב-PHP או ב-StringEscapeUtils ב-JAVA. מה שחשוב הוא שאני יודע היכן לעשות את הסניטציה ולמה חשוב לעשות את זה. בשפה פשוטה יותר – כל שפה מכילה את המנגנונים לאבטחה – השאלה היא אם המתכנת שכותב בשפה הזו יודע איך להשתמש בהם כמו שצריך. לפיכך אל תשאלו אם PHP יותר בטוחה מ-JAVA אלא תשאלו מה הידע של המתכנת בנושא אבטחה.

האם יש פלטפורמה בטוחה יותר?

רוב האתרים היום מתבססים על פלטפורמה מסוימת כמו WordPress או Drupal או ג'ומלה שכתובות ב-PHP. כיוון שהן כתובות באותה השפה, ההבדל היחידי ביניהן נובע מהמבנה השונה של הקוד שלהן.. כמתכנת שכתב תוספים לשלוש הפלטפורמות ועובד עד היום באופן שוטף עם דרופל ועם וורדפרס אני יכול לומר שההבדל העיקרי בין שלושתן הוא המתכנתים שעומדים מאחוריהן ומפתחים את הליבה של הפלטפורמות. וורדפרס הרבה יותר דינמית, עם בסיס מפתחים רחב יותר אבל גם לדרופל אין מה להתבייש ויש לה בסיס קוד איכותי עם מפתחים מסורים רבים. ג'ומלה נחלשה מאוד בזמן האחרון אך גם היא מעודכנת באופן סביר. כיוון שמדובר בפלטפורמות נפוצות, לא מעט חברות עובדות עם הפלטפורמות האלו ועושות בדיקות אבטחה לפלטפורמות האלו ובעיות אבטחה בליבת הפלטפורמות מתתגלות במהירות ועדכוני התיקונים מופצים במהירות.

אז אם הכל מעולה, למה יש פריצות? ממה צריך לפחד?

בגדול, שגיאות בקוד גורמות לפרצות. כל הפלטפורמות – וורדפרס, דרופל וג'ומלה משתנות עם הזמן – מתווספות יכולות חדשות ומתוקנים כל מיני באגים. הדברים האלו נעשים באמצעות קוד ואם יש קוד חדש אז לפעמים מתכנתים גם שוגים בכתיבת הקוד ונוצרות פרצות חדשות. מה שטוב בפלטפורמות האלו שהן נסרקות באופן סדיר על ידי תוכנות, אנשי QA ומתכנתים ואם מתגלות פרצות בליבת המערכת הן מתוקנות במהירות ומנגנוני העדכון האוטומטיים מתקנים את הפרצות במהירות.

אך בעוד שהליבה של הפלטפורמות מתוחזקת היטב, אי אפשר לומר את זה על התוספים. לכל פלטפורמה יש תוספים (בדרופל קוראים להם מודולים, בג'ומלה יש כמה סוגים) שמרחיבים את הפעולות שהיא מסוגלת לעשות. למשל, באתר הזה יש לי תוסף שמוסיף הודעות בתחתית הפוסט, יש לי תוסף שמאפשר לאנשים להרשם לניוזלטר וכו' וכו'. אין כיום אתר וורדפרס, ג'ומלה או דרופל שלא נשען באופן כבד על תוספים. חלק גדול מהתוספים אינו מתוחזק ברמה נאותה וגבוהה כמו קוד הליבה ויכולות להיווצר פרצות. פרצות יכולות להיווצר גם מקוד בעייתי בתבניות (Themes) שמשנות את עיצוב האתר. אם במסגרת בניית האתר שלכם שכרתם מתכנת שיכתוב עבורכם קוד – יש סיכוי שהוא יכתוב קוד עם פרצות אבטחה. זה קורה לכל מתכנת וגם לטובים ביותר שבהם.

אז מה עושים?

עלינו לזכור שיש פרצות אבטחה בכל שפה/פלטפורמה שיש. זה לא שאם אני בוחר בדרופל או ב-JAVA או בדוטנט, אני יכול להיות בטוח שלא יגנבו נתוני משתמשים מהאתר שלי, ישחיתו אותו או ישתילו בו פרסומות. ישנן מספר דרכים להקשיח את הגנת האתר – הראשונה היא להתייחס לכך בחוזה עצמו עם בונה האתר – לוודא שבונה האתר/המתכנת יקשיח את האתר בהתאם לפרקטיקות המקובלות בשוק, לוודא שבחוזה כלולה תחזוקת האתר – כלומר הטמעת עדכונים מיידית של קוד הליבה של הפלטפורמה שבחרנו ושל התוספים שלה, לוודא שבחוזה יש התיחסות לגיבוי האתר וכן לשיחזורו במקרה של התקפה.

אבטחה מוגברת

אם אנו רוצים לקחת את האבטחה שלנו לשלב הבא, צריך להשתמש בכלים מתוחכמים יותר על מנת לאכוף את האבטחה. למשל:

1. Static code analysis – בדיקת קוד סטטית שנעשית ממש בשלבי הפיתוח כחלק ממעגל ה-CI. כך למשל, כשאני מפתח את התוספים שלי לוורדפרס, אני משתמש ב-Grunt שיריץ לי את phpcs והוא מתריע על בעיות אבטחה מסוימות. בפוסט הזה יש הסבר ממשי איך אני עושה את זה. אם קצת איבדתם את ההכרה כשקראתם את זה – זה בסדר, אבל חשוב לשכור מתכנת שמכיר את זה מספיק טוב.
2. Vulnerability Assessment שנעשה על ידי כלי יעודי – יש לא מעט כלים שמבצעים בדיקה יותר מעמיקה (ושאורכת יותר זמן). בדרך כלל משלבים אותם ב-nightly build. מדובר בכלים מקצועיים שעולים כסף ומספקים מידע משמעותי על החולשות שיש בקוד.
3. Black box\ White Box Penetration testing – מדובר בהדמיית תקיפה שנעשית על ידי מתכנתים חיצוניים שמפעילים כלים שדומים לכלים של האקרים/בוטים. גם כאן מדובר בכלים מקצועיים שעולים כסף.

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

אבטחת השרת

עד כה דיברתי על אבטחת הקוד בלבד. אך כמובן שגם לשרת יש תפקיד. גם האתר המאובטח ביותר בעולם יהיה פריץ לחלוטין אם הוא יהיה בשרת שמערכת ההפעלה שלו לא מעודכנת. אם אתם משתמשים בשרת ייעודי (PS או VPS) חשוב שמנהל השרת יגדיר ויעדכן אותו כמו שצריך. אם אתם משתמשים ב-Shared, חשוב לבחור ב-shared איכותי.

לסיכום, אבטחה היא דבר מורכב שדורש ידע והתמחות. אם אתם בונים אתר ומחפשים מתכנת ואכפת לכם מהאבטחה, צריך לזכור שהשאלה החשובה היא לא 'האם הפלטפורמה מאובטחת?' אלא 'עד כמה המתכנת/בונה האתר מוכשר ומבין באבטחה?'. צריך גם לזכור שהגברת רמת האבטחה וההקשחה כרוכה גם בתשלום. מתכנת שיודע מה זו הקשחה, יודע להריץ Static analysis tools וכלי אבטחה שונים כחלק מתהליך ה-Build הוא מתכנת לא זול. לפעמים כדאי יותר להשקיע בגיבויים, אחסון איכותי ועדכונים תכופים מאשר בכלים מתקדמים יותר. הכל תלוי בכם ובצרכים שלכם בסופו של דבר.

פוסטים נוספים שכדאי לקרוא

תמונה מצוירת של רובוט שמנקה HTML
יסודות בתכנות

סניטציה – למה זה חשוב

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

צילום מסך של סוואגר
יסודות בתכנות

openAPI

שימוש בתשתית הפופולרית למיפוי ותיעוד של API וגם הסבר בסיסי על מה זה API

גלילה לראש העמוד