כדי להתגונן מפני מתקפות, מפתחים צריכים לצמצם את נקודות החולשה ולהוסיף תכונות אבטחה לאפליקציה. למזלנו, באינטרנט, הדפדפן מספק תכונות אבטחה רבות. חלק מהתכונות זמינות למפתחים בהסכמה, וחלקן מופעלות כברירת מחדל כדי להגן על המשתמשים.
הרעיון של 'ארגז חול'
דפדפני אינטרנט מודרניים מבוססים על הרעיון של 'ארגז חול'. ארגז חול הוא מנגנון אבטחה שמשמש להרצת אפליקציה בסביבה מוגבלת. בדומה לארגז חול פיזי במגרש משחקים שבו ילדים יכולים ליצור כל מה שהם רוצים בתוך הגבולות בלי ללכלך במקומות אחרים, קוד אפליקציה יכול לפעול בחופשיות בסביבה מוגבלת. לדוגמה, JavaScript יכול להוסיף ולשנות אלמנטים בדף, אבל יכול להיות שהגישה שלו לקובץ JSON חיצוני תהיה מוגבלת. הסיבה לכך היא תכונת ארגז חול שנקראת same-origin
למה צריך ארגז חול?
בכל יום, משתמשים באינטרנט מורידים קוד שרירותי ומריצים אותו במחשב או בטלפון שלהם מספר פעמים. אם מישהו אמר לכם "היי! הורדה והפעלה של האפליקציה הזו!", כדאי לעצור ולחשוב אם האפליקציה מגיעה ממקור מהימן, לקרוא על ספק האפליקציה או לבדוק ביקורות בקפידה. מה קורה כשמישהו שולח לכם כתובת URL עם הכיתוב 'כדאי לך לקרוא את הפוסט הזה בבלוג'? סביר להניח שתלחצו עליו בלי לשאול שאלות כמו "איזה סוג של JavaScript האתר הזה יוריד?".
ארגז החול בדפדפן הוא התכונה העיקרית שמאפשרת גלישה חלקה באינטרנט, כי הוא מאפשר להריץ קוד שרירותי בצורה בטוחה יותר.
הגדרת אבטחה משלב התכנון
אם הדפדפן מפעיל ארגז חול לכל אפליקציית אינטרנט, האם בכלל צריך לדאוג לאבטחה? בהחלט כן!
קודם כל, התכונות של ארגז החול לא מספקות הגנה מושלמת. מהנדסי דפדפנים משקיעים מאמצים רבים, אבל יכול להיות שיש בדפדפנים נקודות חולשה, ותוקפים תמיד מנסים לעקוף את ארגז החול (למשל באמצעות מתקפת Spectre).
לפעמים ארגז החול עלול להפריע ליצירת חוויית שימוש מצוינת באינטרנט. לדוגמה, דפדפן עשוי לחסום בקשת אחזור של תמונה שמתארחת בדומיין אחר. אפשר לשתף משאבים בדומיינים שונים על ידי הפעלת שיתוף משאבים בין מקורות (CORS), אבל אם לא עושים את זה בזהירות, אפשר לחשוף משאב לכל מי שמשתמש באינטרנט, ובכך לבטל את ארגז החול.
סיכום
אפשר להשיג חוויית אינטרנט מאובטחת רק אם האבטחה מוטמעת בתכנון של האפליקציה, ותכנון טוב מתחיל בהבנת התכונות הקיימות. בשני המדריכים הבאים מוסבר לעומק על CORS ועל מדיניות המקור הזהה.