
test יחד עם סימנים מיוחדים, ובודקים ב-view source (Ctrl+F) איך היא חזרה בקוד.< ו-> הקוד מכיל ישויות כמו less than. מנוע התצוגה מציג אותן כרגיל, אבל מנוע ה-JavaScript מדלג עליהן.htmlspecialchars על הערך לפני שהוא מוחזר למסך.%20 או +) וקידוד HTML. אפשר לייצג את אותו תו גם בצורה עשרונית או הקסדצימלית.http או שהיא נתיב יחסי, ולא ב-javascript.הטקסט המלא של הדקות הראשונות בהרצאה «הגנה נגד Reflected XSS רמת אבטחה גבוהה באתר DVWA» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, היום נראה איך אפשר להגן נגד התקפות XSS ואנחנו ברמת High, ברמה הכי גבוהה שיש שהכל מוגן, ואנחנו ב-XSS Reflected ואיך מגינים, אז קודם כל בואו נראה גם איך מחפשים ואיך מגינים איך מתחילים לחפש, האם יש חולשה בכלל אני כותב נניח מילה טסט, שיהיה לי קל לאתר אותה אחרי זה בתוצאות טסט, ונותן את כל הסימנים הכי חשובים לי
שאיתם אני אנסה לפרוץ ואני רואה שכאן זה השתקף זה נראה כאילו זה חשוף אבל איך בודקים אם זה באמת חשוף אני עושה רייט קליק view page source ועושה ctrl f ומחפש את המילה test יכלתי לכתוב כל מילה שרציתי ואני רואה פה הלו טסט ושימו לב במקום סימן גדול יש לי זה נקרא html entities קידוד של html או less than זה זה עכשיו מה זה אומר זה אומר
למנוע של javascript לדלג על הסימנים האלו אבל למנוע תצוגה כן להציג אותם הרי יש מנוע קודם כל של javascript שעובר על הכל ואחרי זה מנוע של תצוגה של html שמציג את הכל אז המנוע של התצוגה מציג את זה כמו שצריך אתם רואים הוא הוא יודע את הכידוד הזה, שזה ה-Great than, Little than, שימו לב, את זה הוא לא כידד לי,
ואת הסימן הזה של גרשיים כפולים הוא כידד לי ל-Quotas. אז ה-Sort זה בעצם לכודד את מה שהיוזר הכניס לכם, אבל לא את הכל, רק את הסימנים המיוחדים, ולכודד אותם בצורה כזאת שהמנוע של התצוגה יבין אותם, אבל המנוע של הביצוע של JavaScript ידלג עליהם.
איך עושים דבר כזה? אנחנו יכולים פה ב-view source לראות מה הם עשו, הם עשו דבר נורא פשוט, הגיע להם מתכנת יותר טוב שלפני שהוא משחרר לי את ה-name מתוך ה-url, לפני שהוא מעביר לי אותו חזרה למסך, השרת, מה הוא עושה?
מפעיל פונקציה שנקראת html special cars, כאילו תווים מיוחדים, הוא מקודד אותם ואז נותן לי את הפלט הזה שראינו שהוא מקודד.
עכשיו בואו נדבר קצת על הקידוד הזה, הקידוד הזה קודם כל גורם לכך שהתצוגה תהיה נורמלית אבל JavaScript לא יתבצע. מתי עושים את הקידוד הזה? על השדות ועל המידע שמגיע מהמשתמש.
יש קידוד ל-URL'ים. URL'ים זה מה שלמעלה פה. אתם רואים פה URL'ים. דרך אגב, שמתם לב שה-URL איך הוא מקודד? כשיש רווח הוא מחליף אותו בפלוס או ב-120%.
זה נקרא URL Encoding, לקודד את ה-URL למעלה. ויש קידוד של HTML, שזה מה שראינו, ה-Great than, Little than וכו'.
אז HTML Entities ככה זה נראה, Less than ו-Greater than, ו-URL Encoding זה אחוזים. לדוגמה, רווח זה אחוז 20 או פלוס. בואו נראה איזשהו אתר שמקודד לנו ככה שתראו איך מקודדים דברים.
זה נורא פשוט. יש תקן, יש ויקיפדיה, יש אתרי אינטרנט שיודעים לקודד את זה. לדוגמה, אתר אינטרנט כזה.
כתבו פה סקריפט והוא מקודד לכם את הסימנים המיוחדים עם הדבר הזה. זאת אומרת אפשר לקודד אותם בצורה כזאת עם אמפרסנט אנד שזה ליטל דן גרייט דן זה צורה אחת וצורה שנייה לקודד את זה על ידי הקסה זה קוד באקסה דצימאלי אתם רואים פה לפי האיקס הזה אני יודע שזה אקסה דצימאלי שזה שתי צורות קידוד בסופו של דבר דבדפן יודע להציג גם את
זה וגם את זה ואני יכול להגיד לו לקודד הכל ואז הוא יקודד לי את כל האותיות, ופה הוא יקודד רק את הסימנים המיוחדים. איך הוא מקודד אותם? לפי דעתי זה UTF-8.
אחרי שזה מקודד, הלקוח מקבל את זה בצורה כזאת. אתם רואים פה הוא מציג אותם בסדר, כי זה מנוע של התצוגה כבר עובד, אבל view source זה המידע הגולמי שהגיע מהאתר.
ב-view source אנחנו רואים greater than, אוקיי עכשיו מה קרה לנו פה מאוד מאוד מעניין שנכנסנו באמצע התגיד של pre אתם רואים pre כאן וpre כאן בגלל שהטקסט שלנו האינפוט שלנו נכנס בתוך התגיד pre לא הייתה לו בעיה לבצע את זה אם זה לא היה מקודד אבל מה היה קורה אם לא היינו נכנסים בתגיד pre אם האינפוט שלנו היה נופל נניח על תגיד האינפוט של הטקסט בוקס מה זאת אומרת זאת
אומרת מה שהיינו מכניסים היה חוזה חזרה אלינו מהשרת לכאן לפה, לתוך השדה הזה. אם אתם תעשו שהמידע יחזור לשדה הזה, שזה אומר input value שווה x, x זה אומר שאם הייתי כותב ככה x, אם השרת היה שולח את מה שהייתי מכניס לו חזרה לכאן, כאילו ממלא במקומי תיבת טקסט, לא היה מתבצע הג'אווה סקריפט.
הג'אווה סקריפט כאן לא מתבצע. אז אם אני רואה שיש לי רפלקשן מההשתקפות מלמעלה, זאת אומרת המידע שאני אכניס לכאן חוזר אליי חזרה לתיבת טקסט לכאן, הוא לא היה מתבצע, הסקריפט לא היה מתבצע.
למה? כי מה שבתוך הטקסט בוקס סתם לא התבצע. אז מה הייתי צריך לכתוב כאן במקום ה-X? הייתי צריך לסגור את הגרש ואז כביכול הייתי סוגר את ה-HTML ואז פותח סקריפט חדש.
אתם מבינים? זאת אומרת, אני בא להסביר לכם שלא תמיד הדבר הזה עובד. הדבר הזה עובד רק כשאנחנו כחלק מתגיות מסוימות, כשאנחנו נניח בתוך הפרה הזה זה עבד כשהיה פה מילת סקריפט אבל כשמה שאנחנו שולחים לשרת פה למעלה ב-url חוזר אלינו חזרה בדברים אחרים כמו תיבות טקסט אנחנו צריכים קודם כל לסגור את התיבת טקסט כדי שהמנוע של html יסגור אותו ורק אז לכתוב לו את הסקריפט שימו לב
לפעמים זה נסגר עם גרשיים ולפעמים עם גרש אחד ואז אנחנו כביכול מסיימים את האינפוט ומתחילים רכיב חדש של הסקריפט ככה דפדפן מתייחס לזה.
אם היינו מכניסים את זה ישירות לכאן, ככה היינו עושים את זה ישירות, הוא היה מתעלם מזה, כי הוא לא יבצע סקריפט שנמצא בתוך תיבת טקסט.
חייבים קודם כל לסגור תיבת טקסט, ורק אחרי זה הוא יבצע את הסקריפט. אפשר לא לסגור תיבת טקסט, אפשר לסגור רק את ה-string של ה-value, value זה מה שנכנס בתוך התיבה, ולהגיד לו auto focus, שתתפוס focus על ה-input הזה, זה הכחול הזה, שימו לב, focus, זה כשהוא נהיה כחול
וכשהיא תתפוס פוקוס תפעיל