
alert בתוך script מוצגת לכל מי שנכנס לפורום, מכל חשבון ומכל מחשב.location העביר כל גולש לאתר אחר. בהרצאה זה היה practicu.com, אבל מי שתוקף יכול לבחור כתובת חמורה יותר.npm i strip-tags, ספרייה שמוחקת תגיות ממחרוזת ומחזירה אותה נקייה.sanitize עם request, response ו-next. היא עוברת בלולאת for ... in על request.body, ורק על מאפיינים מסוג string (לא על מספרים או boolean) מפעילה stripTags. בסוף קוראת ל-next.require באפליקציה ומוסיפים server.use(sanitize) מיד אחרי ה-JSON, כדי שתחול על כל האתר.alert ועם location נשמרים ללא תגיות ולא מורצים.הטקסט המלא של הדקות הראשונות בהרצאה «הגנה מהתקפות XSS» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אנחנו מגיעים לסקיוריטי אישיו הבא והסקיוריטי אישיו הבא מתעסק פה עם הפורום כאן אנחנו יודעים שאנחנו יכולים להכניס שם בוא נניח דיוויד ואיזושהי הודעה הלואו אול וההודעה הזאת מתפרסמת בפורום מה קורה עם ההודעה הזאת ההודעה הזאת נשלחת ונכנסת לדאטאבייס בואו נתכנס
רגע לדאטאבייס נלך לפורום והנה אנחנו רואים דיוויד שלח הלואו אול ומה שמיוחד בקונספט הזה זה שהדף מציג את זה. מה שהיה בדאטאבייס, מה שנכנס, מוצג על הדף בהתאם לפורומים.
זה יכול להיות פורומים, זה יכול להיות בלוגים, זה יכול להיות כל מקום שאנחנו מפרסמים דברים ואז רואים אותם. אז מה מיוחד בזה?
שאנחנו עכשיו יכולים להכניס דבר כזה. בוא נניח שדייוויד ממשיך להכניס הודעות, וההודעה שהוא מכניס זה לא Hello all זה תגית h1 סגירת תגית h1 שבתוכה Hello all מה יקרה עכשיו?
בואו נבצע פוסט נרד פה למטה ושימו לב איך נראה כרגע ה-Hello all שלו זה לא משהו שאנחנו רוצים לאשר ללקוחות אבל בוא נניח שזה לא כזה פרצת החמורה מה שנכנס לדאטאבייס אם אנחנו נסתכל זה בדיוק המחוזת הזאת אבל רגע אולי אותו דייוויד יעשה עכשיו משהו קצת שונה מה שהוא יעשה אם אפשר להכניס תגיות
בואו ננסה להכניס תגית קריפט הרי בסופו של דבר זו תגית ותגית סקריפט נגדיר בה בתוכה קודם כל יש לנו פתיחה וסגירה סקריפט ונכניס בתוכה אלרט כי מה שיש בתוך תגית סקריפט זה ג'אווה סקריפט ובאלרט ניתן איזושהי הודעה go away.
אוקיי, זה כבר פחות יפה להציג. בואו נסתכל רגע מה יקרה. אני מבצע פוסט, ושימו לב מה קרה. אני רואה go away, אז אתם יכולים להגיד, טוב, נו, מה אכפת לך? אז דיוויד יראה go away.
אבל זה לא רק דיוויד יראה go away. כל מי שנכנס עכשיו לפורום, לא משנה מאיזה חשבון, איזו מדינה, איזה קליינט ויציג את הפורומים. שימו לב, אני הולך להום.
בפורום אני מסתכל, אני רואה שיש לי פה as is את ההודעה. אז ברגע שכל לקוח יגיע לפורום, הוא יראה את ההודעה הזאת, go away. וזה לא כזה אסתטי ויפה ואני לא רוצה להתחיל להציג אלרטים.
בואו נגיד שדייוויד מכניס עכשיו משהו עוד יותר חמור. בואו נגיד שדייוויד מכניס סקריפט פתיחה סגירה וכותב בתוכו את הפקודה הבאה: לוקיישן שווה.
מה זה לוקיישן בג'אווה סקריפט? פשוט שינוי הכתובת של הדף הנוכחי. ובואו נניח שהוא הולך ל-HTTP, practicu.com, אני קצת לא רואה את זה, practicu.com, נניח שזאת ההודעה שהוא עכשיו מכניס.
מה בעצם עשינו? הלכנו ושינינו לו את הכתובת הנוכחית. אני מבצע פוסט ושימו לב שבום, עפנו פה לאתר הזה.
וכמובן שהמערכת יכולה, היוזר או ההאקר יכול לתת אתרים קצת יותר חמורים מפרקטיק יו, כן? בואו רגע ניקח את הכתובת המקורית, כי הוא כל הזמן הולך לי עכשיו, ונדביק רק את הכתובת המקורית, אוקיי? ניפטר מהזה.
אם אני הולך ל-Home, הכל בסדר. Login זה בסדר, אני כמובן לא Login אז אני לא יכול לראות את הפרודקטס. כל יוזר בעולם שינסה להגיע לפורום יקבל Go Away ובום, אנחנו מעיפים אותו מהאתר הזה.
אנחנו לא רוצים שיהיה ניתן לבצע את הדברים האלה. מה פה הייתה הבעיה? הבעיה הייתה שאנחנו אישרנו להכניס או לא מנענו מלהכניס תגיות ואז כאשר הפורום מציג על המסך אז או שהוא מציג את התגית או שהדפדפן מריץ אותה, אם זה JavaScript, ופתאום כל יוזר יכול לכתוב לכם JavaScript
שמבצע כל מיני דברים בכל מחשב שגולש לאתר הזה. אנחנו רוצים לטפל בזה. הפריצה הזאת נקראת XSS שזה קיצור של קרוס, ה-X זה קרוס, סייט טריפטינג, קרוס סייט סקריפטינג זה המצב הזה שאנחנו מאשרים להכניס תגיות ואז האקר יכול לחגוג על ג'אווה סקריפט בעיקר להרוס לנו דברים באתר.
קודם כל בואו ניפטר רגע מכל אלה. קוטאם delete do you really want yes נשארנו עם ההגדרות המקוריות.