מילון סייבר בעברית

מה זה XSS ואיך מידע הופך לקוד בדפדפן

XSS, קיצור של Cross-Site Scripting, הוא סוג חולשה שבו מידע לא מהימן יכול להתפרש בדפדפן כתוכן פעיל במקום להישאר נתון. ההשפעה תלויה במקום ובסמכויות של ההקשר שבו התוכן מוצג. זו אינה רק שגיאת עיצוב, והגנה על הקשר באמצעות HTTPS אינה מבטיחה שהיישום מטפל בפלט בבטחה.

למה ההקשר שבו מציגים מידע חשוב

אותו ערך יכול להופיע כטקסט, במאפיין HTML, בקישור או בקוד דפדפן. אלה הקשרים שונים, והטיפול המתאים לאחד אינו בהכרח מתאים לאחר. OWASP מדגישה קידוד פלט לפי ההקשר ושימוש נכון בהגנות של המסגרת שבה מפתחים.

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

OWASP: הגנת פלט מפני XSS

איך מתארים מסלולים נפוצים בלי לבלבל ביניהם

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

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

איזו הגנה מתאימה לנתונים ואיזו לתוכן עשיר

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

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

OWASP: הגנת פלט מפני XSS

דוגמה: הערה בטופס מוצגת בהמשך למנהל

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

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

מה XSS אינו אומר על האירוע באתר

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

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

מקור מקצועי: OWASP: הגנת פלט מפני XSS

תשובות ברורות

שאלות שעולות בנושא

XSS קורה רק בתגובות ציבוריות?

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

אם המסגרת עושה escaping, אין צורך לבדוק?

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

XSS ו-CSRF הם אותה חולשה?

לא, XSS עוסק בתוכן פעיל לא רצוי בדפדפן; CSRF עוסק בבקשה לפעולה דרך הקשר מאומת. לכל אחד מודל ובקרות שונים.

מתקדמים לפי הצורך

קיבלתם אזהרת XSS על רכיב באתר?

נמפה גרסה ומסלולי מידע ונגדיר בדיקה ותיקון בהיקף מורשה ומתועד.

לתיאום בדיקה וטיפול