למה ההקשר שבו מציגים מידע חשוב
אותו ערך יכול להופיע כטקסט, במאפיין HTML, בקישור או בקוד דפדפן. אלה הקשרים שונים, והטיפול המתאים לאחד אינו בהכרח מתאים לאחר. OWASP מדגישה קידוד פלט לפי ההקשר ושימוש נכון בהגנות של המסגרת שבה מפתחים.
בדיקה של פורמט קלט חשובה לצורכי היישום, אך אינה לבדה הבטחה שהמידע מוצג בבטחה בכל מקום. גם מידע שנשמר במערכת או הגיע מספק אינו אוטומטית מהימן. צריך להבין את הנתיב מן המקור ועד לנקודת התצוגה.
איך מתארים מסלולים נפוצים בלי לבלבל ביניהם
מקובל להבחין בין מידע שחוזר בתשובה למשתמש לבין מידע שנשמר ומוצג בהמשך. גם עיבוד בצד הדפדפן יכול ליצור את הפרשנות הלא בטוחה. אלה תיאורים של זרימה והקשר, ולא שלוש קופסאות שכל מקרה חייב להשתייך רק לאחת מהן.
| מסלול | מה בודקים | דוגמת הקשר ללא קוד תקיפה |
|---|---|---|
| תשובה לבקשה | איך נתון מוחזר למסך | מסך חיפוש |
| מידע שמור | מי רואה את התוכן בהמשך | הערה שמוצגת למנהל |
| עיבוד בדפדפן | איך ערך מגיע ליעד תצוגה | רכיב שקורא מידע מקישור |
| HTML עשיר | מה מותר להציג וכיצד מטפלים בו | עורך תוכן עם הרשאות מוגדרות |
איזו הגנה מתאימה לנתונים ואיזו לתוכן עשיר
כאשר המטרה היא להציג טקסט, משתמשים בדרך תצוגה בטוחה ובהגנות המתאימות להקשר. כאשר נדרש HTML עשיר, צריך מנגנון נתמך להגבלת התוכן המותר ולא רק החלפת תווים ידנית. שינוי שגוי עלול לפגוע בתפקוד או להשאיר מסלול שלא טופל.
CSP ובקרות אחרות יכולות להוסיף שכבה, אך אינן מתקנות אוטומטית כל נקודת פלט לא בטוחה. אין תוסף או כותרת יחידים שמוכיחים שהאתר כולו מוגן. בתיקון בודקים גם את מקור הנתון, הרשאות היוצר והמסכים שאליהם הוא מגיע.
דוגמה: הערה בטופס מוצגת בהמשך למנהל
התרחיש להמחשה בלבד. תוכן פנייה נשמר ואז מוצג בממשק שירות. אם התצוגה מתייחסת למידע כאל קוד במקום כטקסט, סיכון יכול להופיע בעת קריאת הפנייה ולא רק בזמן שליחתה. הדוגמה מסבירה זרימה ואינה הוראה לניסוי על מערכת חיה.
בדיקה מורשית צריכה למפות את מסכי התצוגה ואת המשתמשים, לתקן את ההקשר ולבצע בדיקה חוזרת בנתוני ניסיון. לא מעבירים מחרוזות חשודות או תוכן לקוחות לערוצי תמיכה ציבוריים ללא טיפול מתאים.
מה XSS אינו אומר על האירוע באתר
קיומה של חולשה אינו מוכיח שמישהו ניצל אותה. שינוי בדף יכול לנבוע מכמה סיבות, וצריך לבחון קוד, גרסה וראיות. אם יש תוכן לא מוכר או חשבון חשוד, משמרים מידע ומפרידים תיקון קוד מבירור היקף הפגיעה.
XSS שונה מ-SQL Injection במסד ומ-CSRF בפעולה מאומתת. ההבדל עוזר לבקש תוצר נכון: תיאור הזרימה, הגנה בהקשר הרלוונטי ובדיקת תפקוד אחרי התיקון, ולא רק הודעה שהתו המסוים נחסם.