Skip to main content

XSS התקפת

התקפת XSS על אפליקציות ווב

התקפת XSS מנצלת את העובדה שאפלקציית ווב משתמשת ב HTML ו JavaScript לרוץ על הדפדפן. 

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

ראשית, XSS הוא ראשי תיבות של Cross Site Scripting. במקומות מסויימים ההתקפה גם נקראית JavaScript injection.


איך זה עובד?

זה כל כך פשוט שזה מדהים. 

התוקף צריך להזריק קוד שלו לתוך דף שהנתקף עלול לגלוש אליו. ברגע שהנתקף ניגש לדף הזה, הקוד של התוקף ירוץ על הדפדפן שלו.

ואיך אפשר "להזריק" קוד? הרי זה נשמע בלתי אפשרי ...  

יותר קל להבין את השיטה דרך דוגמא.

דוגמא:

בואו נסתכל על אתר פורומים שמאפשר לשמור בו הודעות בפורום. 

באתר כזה יהיה טופס להכניס הודעה חדשה לפורום. ויהיה בו דף אחר בו אפשר לראות את כל ההודעות.

להלן דף להזנת הודעה חדשה:


ובדף אחר אפשר לראות את כל ההודעות:



עכשיו התוקף ייכנס לאתר ויזין לשדה הנושא או לשדה ההודעה מחרוזת שמריצה קוד JavaScript (יש להקיף אותו בתגית



מה שיקרה עכשיו הוא שכאשר מישהו ייכנס לדף שמראה את ההודעות, אזי הדפדפן שלו עלול להריץ את הקוד:

למה זה קורה ?

ההרצה של הקוד הזדוני תתרחש אם אפליקציית הווב תניח שכל שדות המידע תקינים ומכילים מחרוזות פשוטות. במקרה כזה היא תשרשר בדף ה 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
&lt;p style=&quot;color:blue&quot;&gt; this is &lt;em onmouseover=&quot;this.textContent='ATTACK!'&quot;&gt;click here&lt;/em&gt; attacker code &lt;/p&gt;
הטקסט יוצג ממש כמחרוזת HTML אך ללא הפעלת הפעולות (שינוי צבע או פעולת עכבר)
אפשר לסמוך על הקלט (אם בטוחים שבסדר משום מה)
המקור
הטקסט יוצג בעיצוב הדרוש וכאשר לוחצים עם העכבר, יבוצע הקוד

יש לבחור את השיטה שדרושה. דרך אגב, באנגולר יש כבר תמיכה בכל אחת מהשיטות שהוזכרו (ng-bind, שרות $santize ושרות $sce)

וזה היה תאור קצר על התקפת XSS ואיך להתגונן בפניה.

Comments

Popular posts from this blog

Jenkins error: groovy.lang.MissingPropertyException

I tried to run groovy build step and got below error. This post will describe how I solved the problem.

Caught: groovy.lang.MissingPropertyException: No such property: hudson for class: script


SSL in pictures

Here is my summary on SSL (or as I like to call it 'SSL for dummies')