התקפת XSS על אפליקציות ווב
התקפת XSS מנצלת את העובדה
שאפלקציית ווב משתמשת ב HTML ו JavaScript לרוץ על
הדפדפן.
בעזרת הטכניקה שתתואר בהמשך, התוקף מצליח להריץ קוד JavaScript שלו על הדפדפן של הנתקף.
ראשית, XSS הוא ראשי תיבות של Cross Site Scripting. במקומות מסויימים ההתקפה גם נקראית JavaScript injection.
איך זה עובד?
זה כל כך פשוט שזה מדהים.
התוקף צריך להזריק קוד שלו לתוך דף שהנתקף עלול לגלוש אליו. ברגע
שהנתקף ניגש לדף הזה, הקוד של התוקף ירוץ על הדפדפן שלו.
ואיך אפשר "להזריק" קוד? הרי זה נשמע בלתי אפשרי ...
יותר
קל להבין את השיטה דרך דוגמא.
דוגמא:
בואו נסתכל על אתר פורומים שמאפשר לשמור בו הודעות בפורום.
באתר כזה
יהיה טופס להכניס הודעה חדשה לפורום. ויהיה בו דף אחר בו אפשר לראות את כל ההודעות.
להלן דף להזנת הודעה חדשה:
ובדף אחר אפשר לראות את כל ההודעות:
עכשיו התוקף ייכנס לאתר ויזין לשדה הנושא או לשדה ההודעה מחרוזת
שמריצה קוד JavaScript (יש להקיף אותו בתגית ):
מה שיקרה עכשיו הוא שכאשר מישהו ייכנס לדף שמראה את ההודעות, אזי
הדפדפן שלו עלול להריץ את הקוד:
למה זה קורה ?
ההרצה של הקוד הזדוני תתרחש אם אפליקציית הווב תניח שכל שדות המידע
תקינים ומכילים מחרוזות פשוטות.
במקרה כזה היא תשרשר בדף ה HTML שהיא מייצרת את התוכן של כל השדות.
דוגמא:
subject
string 1
message
string 1
subject
string 2
message
string 2
זה יהפוך ל:
General
Discussion
Have
something you ….
מה שיקרה עכשיו הוא שכאשר מישהו ייכנס לדף שמראה את
ההודעות, אזי הדפדפן שלו עלול להריץ את הקוד:
למה זה קורה ?
ההרצה של הקוד הזדוני תתרחש אם אפליקציית הווב תניח שכל שדות המידע
תקינים ומכילים מחרוזות פשוטות. במקרה כזה היא תשרשר בדף ה HTML שהיא מייצרת את התוכן של כל השדות.
דוגמא:
<div>subject string 1</div>
<div>message string 1</div>
<div>subject string 2</div>
<div>message string 2</div>
זה יהפוך ל:
<div>General Discussion</div>
<div>Have something you ….</div>
<div><script src=attackersite ></script></div>
<div><script src=”javascript:Function(v)”></script> </div>
מה אפשר לעשות?
אסור לסמוך שהמשתמש הכניס מחרוזת שאינה מכילה קוד זדוני!
לפני שמציגים מידע שהגיע ממשתמש כלשהו, אפליקציית הווב צריכה לנקות
אותו מקוד זדוני, פעולה שנקראית sanitation (חיטוי).
עד כמה לנקות?
ניקח לדוגמא את הקלט:
<p style="color:blue">
this is
<em onmouseover="this.textContent='ATTACK!'">click here</em>
attacker code
</p>
יש כמה אפשרויות:
מה עושים
|
מה יישאר
|
מה יקרה על המסך
|
אפשר להוריד כל תגית HTML (התגית והתוכן שלה)
|
this is attacher code
|
הטקסט יוצג בצבע ברירת המחדל
|
אפשר להוריד רק תגיות מסוכנות. זה מאפשר להציג שדה שיש לו עיצוב.
דבר שמאוד שכיח בשדות טקסט של הודעה או תאור.
|
<p style="color:blue">
this is
<em >click here</em>
attacker code
</p>
|
הטקסט יוצג בצבע שרשום ובעיצוב שרשום ללא onmouseover
|
אפשר לבצע פעולה שנקראית escaping והיא הופכת כל תו "<" או ">" לייצוג שלו ב HTML
|
<p style="color:blue">
this is
<em onmouseover="this.textContent='ATTACK!'">click here</em>
attacker code
</p>
|
הטקסט יוצג ממש כמחרוזת HTML אך ללא הפעלת הפעולות (שינוי צבע או פעולת עכבר)
|
אפשר לסמוך על הקלט (אם בטוחים שבסדר משום מה)
|
המקור
|
הטקסט יוצג בעיצוב הדרוש וכאשר לוחצים עם העכבר, יבוצע הקוד
|
יש לבחור את השיטה שדרושה. דרך אגב, באנגולר יש כבר תמיכה בכל אחת
מהשיטות שהוזכרו (ng-bind, שרות $santize ושרות $sce)
וזה היה תאור קצר על התקפת XSS ואיך להתגונן בפניה.
Comments