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

SSL in pictures

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

Best freeware - XML editor

As a software developer, I open XML files all the time. I a heavy commercial XML editor. But nothing can compare to a small, thin and free XML editor like 'foxe'. A great feature is has is the alignment of long XML strings to readable XML format (Shift-F8). It help lot of times when the XML file was generated by some tool and was not readable. Homepage: http://www.firstobject.com/dn_editor.htm

What is dynamic programming (hebrew)?

תכנון דינמי, תכנות דינמי או באנגלית Dynamic Programming הם שמות לדרך ליצירת אלגוריתמים. המילה "תכנות" בשם כוונות יצירת תוכנית פעולה ולא קידוד בשפת תכנות. הבסיס של השיטה שני הרעיונות שעומדים מאחורי השם המרשים הם: 1.      האלגוריתם יפתור את הבעייה בצורה רקורסיבית ע"י חלוקתה לתתי בעיות שגם הן נפתרות ע"י חלוקתן לתתי בעיות וכו עד שמגיעים לבעיה פשוטה. זה בעצם סוג של רקורסיה עם כמה תוספות. 2.      החזקה בצד את כל התוצאות שכבר נמצאו לתתי בעיות כך שאם נגיע שוב לאותה תת בעייה, לא נחשב אותה שוב. יותר קל להבין את הרעיון הזה ע"י שתי דוגמאות. דוגמא אחת היא בעיית "תרמיל הגב" ובעייה שנייה היא חישוב מספר פיבונצ'י. בעיית "תרמיל הגב"   בעיית "תרמיל הגב" או  Knapsack problem היא בעייה כללית שיש לה שימושים שונים.  דוגמא לבעיה הזו: גנב נכנס למחסן. יש לו תרמיל שיכול לסחוב עד 7 ק"ג. במחסן יש 30 מוצרים. כל מוצר שוקל משקל מסויים ויש לו ערך כספי מסויים. הגנב צריך דרך (אלגוריתם) לדעת איזה מוצגים לקחת כך שיהיה להם...