למי בדיוק אכפת מצד הלקוח כשמדברים על אבטחה? את השאלה הזו אני שומע שוב ושוב כאשר אני מעלה את הנושא. האמת היא שעם כמות חורי האבטחה שאנחנו מגלים באתרים בישראל זה גם נכון – למי אכפת בדיוק מחורי אבטחה כאשר אתרים ביטחוניים מאפשרים לכל מאן דהו לשלוח שאילתות SQL ישירות למסד הנתונים (אתר השב״ס חשף את כל המידע על כל המועמדים לשירות); למי אכפת מדקויות של צד הלקוח כשמרשם האוכלוסין מחליט לשים את שרת הרדיס של ההודעות שלו גלוי ברשת ללא צורך אפילו בסיסמה?
אבל בואו נתנתק מעט מהכשלים הטכנולוגיים הברורים של האתרים הישראליים וננסה לעבוד בסטנדרטים מעט גבוהים יותר. לפאשלות כאלה עולם הפיתוח כבר לא ייפול, אבל זה רק אומר שהאקרים ומזיקים אחרים יתמקדו בחולשות מתוחכמות יותר כשהם ירצו להזיק לאתר, לחברה או לאפליקציה. כלומר, כאשר עוברים לשלב של מעבר לצפוי מראש, מגלים שבעולם מתוחכם יש חשיבות רבה לחורי אבטחה בצד הלקוח.
אז אילו חורי אבטחה יש בצד הלקוח? באופן תאורטי לא אמורים להיות חורים כאלו, שהרי הקוד של צד הלקוח והפעולה שלו אמורים להיות גלויים לכל אדם. אך מתברר שיש פרקטיקות פיתוח בצד הלקוח שעלולות לגרום לבעיות קשות, אחת מהן נקראת XSS ובאמצעותה נוח להמחיש מה הבעיות שיכולות לקרות.
אם אין הגנות על צד השרת – כל מי שייכנס לאתר יקבל alert נאה שכתוב עליו xss. כמובן הפרצה עצמה יכולה להיות קצת יותר מסוכנת מ-alert מסכן: היא יכולה לכלול קוד שעושה דברים בשם הלקוח, מציג לו דברים או מתקין לו דברים; השמים הם הגבול ברגע שניתן להזריק קוד ג’אווהסקריפט.
הפרצות האלו קורות מטעויות של יצרניות הדפדפנים שמאפשרות הרצת ג’אווהסקריפט ממקומות שעדיף להם שלא ירוצו. והן מחמירות ככל שאנחנו נשענים יותר ויותר על API של צדדים שלישיים, שמביאים לנו את המידע משרתים שלא תמיד מאפשרים לנו להשפיע על התוכן שלהם.
איך מונעים את הפרצות האלה? אם אתם מתכנתי צד לקוח, זה הזמן לגלות את פונקציות הסניטציה השונות שלוקחות פלט מהשרת, אלה שאנחנו לא יכולים להיות בטוחים בנוגע אליו, ולנקות אותו בהתאם לצורכי האפליקציה, או להבין למה להשתמש ב-innerHTML במקרים שאינם הכרחיים עלול להיות בעייתי.
או, אם אנחנו כן רוצים לשמר את ה-HTML בפלט, אפשר לעשות סניטציה באמצעות ספריות ג’אווהסקריפט או באמצעות קוד שלכם. הכל תלוי באפליקציה. חשוב לציין שגם מתכנתי אנגולר ומי שמשתמש ב-bind-html, חשופים לפרצות בצד לקוח וצריכים לעשות סניטציה לקוד עוד היום. זו רק דוגמה אחת לסיבה שבה גם מתכנתי frontend צריכים לדעת על אבטחת מידע.
6 תגובות על "למי אכפת מאבטחת מידע בצד לקוח?"
התקפות XSS הן לרוב לא בצד הלקוח, אלה בעיה של השרת שמרנדר אותן חזרה לדף. לגבי קלט מעוצב – עדיף לקבל Markdown מאשר HTML (וגם לוודא שהפרסר שלכם מתעלם מתגיות HTML בMarkdown). מחיר קטן בביצועים, רווח גדול באבטחה ובשמירה על העיצוב של הדף.
הבא למי בכלל מתאים אקסלרטור ואיך בוחרים את זה שנכון עבורכם?