PracticU

הגנה מהתקפות XSS

בלי כתוביותעם כתוביות
PracticU › קורס NodeJS › הגנה מהתקפות XSS
מילון מושגים:
XSS - חולשה באתרים שבה תוקף מחדיר סקריפט זדוני לדף שמוצג למשתמשים אחרים ורץ בדפדפן שלהם.
Middleware - שכבת תוכנה שמתווכת בין רכיבים ומטפלת בבקשות בדרכן, למשל לאימות, רישום לוג או עיבוד נתונים.
JavaScript - שפת תכנות שרצה בעיקר בדפדפן ומוסיפה אינטראקטיביות לדפי אינטרנט. רצה גם בצד השרת באמצעות Node.js.
npm - מנהל החבילות של Node.js, המשמש להתקנה ולניהול ספריות JavaScript בפרויקט.
ספרייה - אוסף קוד מוכן, כמו פונקציות ומחלקות, שמפתחים משתמשים בו בתוכניותיהם במקום לכתוב הכול מחדש.
תגובה - המידע שהשרת מחזיר ללקוח בתשובה לבקשה, הכולל בדרך כלל נתונים וקוד סטטוס.
בוליאני - סוג נתונים שיכול לקבל אחד משני ערכים בלבד: אמת (true) או שקר (false).
JSON - פורמט טקסט קריא לייצוג נתונים מובְנים כזוגות מפתח-ערך, נפוץ להחלפת מידע בין שרת ללקוח.

הגנה מהתקפות XSS
פורום או בלוג מציגים בדף את מה שנשמר בדאטאבייס, ואם אין בדיקה, גם קוד שמשתמש הקליד יגיע לדפדפן של כל מי שיגלוש. ההרצאה מציגה את הבעיה, Cross Site Scripting או XSS, ואת הפתרון בעזרת middleware.
מה הבעיה
1. הודעה רגילה: משתמש מפרסם הודעה בפורום, היא נשמרת בדאטאבייס ומוצגת בדף.
2. תגיות HTML: כשההודעה כוללת תגית כמו h1, הדפדפן מציג אותה כתגית ולא כטקסט.
3. תגית script: הודעה עם alert בתוך script מוצגת לכל מי שנכנס לפורום, מכל חשבון ומכל מחשב.
4. שינוי כתובת: סקריפט שמשנה את location העביר כל גולש לאתר אחר. בהרצאה זה היה practicu.com, אבל מי שתוקף יכול לבחור כתובת חמורה יותר.
5. הסיבה: לא מנענו הכנסת תגיות, והדפדפן מריץ JavaScript מהתוכן שנשמר. אחרי הדגמה נמחקו ההודעות מהדאטאבייס.
הפתרון: Sanitizer
1. התקנה: npm i strip-tags, ספרייה שמוחקת תגיות ממחרוזת ומחזירה אותה נקייה.
2. ה-middleware: פונקציית sanitize עם request, response ו-next. היא עוברת בלולאת for ... in על request.body, ורק על מאפיינים מסוג string (לא על מספרים או boolean) מפעילה stripTags. בסוף קוראת ל-next.
3. הפעלה: מייצאים אותה, עושים require באפליקציה ומוסיפים server.use(sanitize) מיד אחרי ה-JSON, כדי שתחול על כל האתר.
בדיקה
אחרי השינוי h1 נשמר בדאטאבייס בלי התגיות, והמילים hello all מוצגות כטקסט. גם ה-script עם alert ועם location נשמרים ללא תגיות ולא מורצים.
אחרי ההרצאה אפשר להסביר מהו XSS ולהוסיף לאפליקציה שכבה שמנקה תגיות מכל קלט טקסטואלי.
השיעור הבא בקורס: הגנה מהתקפות DDOS

פרקי ההרצאה: הגנה מהתקפות XSS

  1. 00:00

    הודעות פורום שנשמרות בדאטאבייס

  2. 00:46

    הכנסת תגיות HTML להודעה

  3. 01:40

    סקריפט alert שרץ לכל הגולשים

  4. 03:00

    הפניית הגולשים לאתר אחר

  5. 04:40

    מה היא פרצת XSS

תמלול ההרצאה: הגנה מהתקפות XSS

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

  1. 00:03

    אנחנו מגיעים לסקיוריטי אישיו הבא והסקיוריטי אישיו הבא מתעסק פה עם הפורום כאן אנחנו יודעים שאנחנו יכולים להכניס שם בוא נניח דיוויד ואיזושהי הודעה הלואו אול וההודעה הזאת מתפרסמת בפורום מה קורה עם ההודעה הזאת ההודעה הזאת נשלחת ונכנסת לדאטאבייס בואו נתכנס

  2. 00:31

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

  3. 00:48

    זה יכול להיות פורומים, זה יכול להיות בלוגים, זה יכול להיות כל מקום שאנחנו מפרסמים דברים ואז רואים אותם. אז מה מיוחד בזה?

  4. 00:57

    שאנחנו עכשיו יכולים להכניס דבר כזה. בוא נניח שדייוויד ממשיך להכניס הודעות, וההודעה שהוא מכניס זה לא Hello all זה תגית h1 סגירת תגית h1 שבתוכה Hello all מה יקרה עכשיו?

  5. 01:22

    בואו נבצע פוסט נרד פה למטה ושימו לב איך נראה כרגע ה-Hello all שלו זה לא משהו שאנחנו רוצים לאשר ללקוחות אבל בוא נניח שזה לא כזה פרצת החמורה מה שנכנס לדאטאבייס אם אנחנו נסתכל זה בדיוק המחוזת הזאת אבל רגע אולי אותו דייוויד יעשה עכשיו משהו קצת שונה מה שהוא יעשה אם אפשר להכניס תגיות

  6. 01:55

    בואו ננסה להכניס תגית קריפט הרי בסופו של דבר זו תגית ותגית סקריפט נגדיר בה בתוכה קודם כל יש לנו פתיחה וסגירה סקריפט ונכניס בתוכה אלרט כי מה שיש בתוך תגית סקריפט זה ג'אווה סקריפט ובאלרט ניתן איזושהי הודעה go away.

  7. 02:18

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

  8. 02:32

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

  9. 02:48

    בפורום אני מסתכל, אני רואה שיש לי פה as is את ההודעה. אז ברגע שכל לקוח יגיע לפורום, הוא יראה את ההודעה הזאת, go away. וזה לא כזה אסתטי ויפה ואני לא רוצה להתחיל להציג אלרטים.

  10. 03:06

    בואו נגיד שדייוויד מכניס עכשיו משהו עוד יותר חמור. בואו נגיד שדייוויד מכניס סקריפט פתיחה סגירה וכותב בתוכו את הפקודה הבאה: לוקיישן שווה.

  11. 03:23

    מה זה לוקיישן בג'אווה סקריפט? פשוט שינוי הכתובת של הדף הנוכחי. ובואו נניח שהוא הולך ל-HTTP, practicu.com, אני קצת לא רואה את זה, practicu.com, נניח שזאת ההודעה שהוא עכשיו מכניס.

  12. 03:47

    מה בעצם עשינו? הלכנו ושינינו לו את הכתובת הנוכחית. אני מבצע פוסט ושימו לב שבום, עפנו פה לאתר הזה.

  13. 04:01

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

  14. 04:23

    אם אני הולך ל-Home, הכל בסדר. Login זה בסדר, אני כמובן לא Login אז אני לא יכול לראות את הפרודקטס. כל יוזר בעולם שינסה להגיע לפורום יקבל Go Away ובום, אנחנו מעיפים אותו מהאתר הזה.

  15. 04:40

    אנחנו לא רוצים שיהיה ניתן לבצע את הדברים האלה. מה פה הייתה הבעיה? הבעיה הייתה שאנחנו אישרנו להכניס או לא מנענו מלהכניס תגיות ואז כאשר הפורום מציג על המסך אז או שהוא מציג את התגית או שהדפדפן מריץ אותה, אם זה JavaScript, ופתאום כל יוזר יכול לכתוב לכם JavaScript

  16. 05:06

    שמבצע כל מיני דברים בכל מחשב שגולש לאתר הזה. אנחנו רוצים לטפל בזה. הפריצה הזאת נקראת XSS שזה קיצור של קרוס, ה-X זה קרוס, סייט טריפטינג, קרוס סייט סקריפטינג זה המצב הזה שאנחנו מאשרים להכניס תגיות ואז האקר יכול לחגוג על ג'אווה סקריפט בעיקר להרוס לנו דברים באתר.

  17. 05:31

    קודם כל בואו ניפטר רגע מכל אלה. קוטאם delete do you really want yes נשארנו עם ההגדרות המקוריות.

לקורס המלא: קורס NodeJS אונליין בעברית

ההרצאה הקודמת: הגנה מהתקפות SQL Injection

ההרצאה הבאה: הגנה מהתקפות DDOS

הרצאות קשורות מקורסים אחרים

  • XSS - הגנה נגד פריצה לאתר
  • הגנה על AD - Active Directory
  • איך להגן על אתר מהתקפות - DDOS & Brute Force
  • הגנה מהתקפת SQL injection

קורסים נוספים במסלול

  • קורס יסודות HTML - בניית אתר אינטרנט פשוט
  • קורס CSS 3 - בדגש על Flex & Grid
  • קורס Javascript כולל JQuery
  • קורס ג'אווה סקריפט מעשי - JavaScript
  • קורס TypeScript
  • קורס ריאקט - React