Cross-Site Scripting, הידוע בכינויו XSS, היא אחת משיטות ההתקפה המסוכנות ביותר בהן משתמשים פושעי סייבר, לכן חיוני שכל מפתח וחוקר אבטחה ידע מה זה ואיך למנוע התקפות. אז איך אתה יכול לנקוט בפעולה נגד פגיעות XSS? אתה משתמש ב-HTML, JavaScript או DOM כדי להציג את הנתונים שאתר מקבל מהמשתמש. אחד או יותר משלושת התחומים השונים הללו יכולים לעבוד יחד.
כיצד למנוע XSS באמצעות HTML
XSS מאפשר לתוקפים להחדיר קודים זדוניים או סקריפטים לדפי אינטרנט, המכוונים למשתמשים תמימים המבקרים באתר. זה עלול לגנוב נתונים אישיים, להפנות מבקרים לאתר אחר שהוקם על ידי פושע הרשת, או לחבל בדרך אחרת במראה של דף האינטרנט. אבל אתה יכול למנוע את זה לקרות; למשל, על ידי עצירת הכנסת HTML.
תאר לעצמך שיש לך אתר אינטרנט עם ספר אורחים. נניח שהמבקרים שלך המשתמשים בספר האורחים הזה יכולים לכתוב את שמם והודעותיהם כאן, וניתן לצפות בהודעות שלהם בפומבי. תוקף שרוצה לערוך בדיקת XSS בספר האורחים שלך ישתמש באזור שהקצבת כדי לכתוב הודעה. פושע הסייבר הזה יפעיל כאן קוד JavaScript. לדוגמה, תוקף יכול להשתמש בקוד JavaScript כמו:
<תַסרִיט>עֵרָנִי("ה-XSS!")</script>
התוקף חייב להשתמש בתג סקריפט כדי שזה יצליח. אם לא, קוד JavaScript לא יעבוד. עליך לקודד את ההצהרה < כדי שמשתמשים לעולם לא יוכלו להשתמש בתגי HTML. זה יקשה על התוקף לעבוד עם תגי HTML.
כיצד למנוע XSS באמצעות JavaScript
ההיגיון ב-HTML הוא גם תקף ב-JavaScript. בחלק מהאפליקציות, ניתן להדפיס את הנתונים שהתקבלו באתר מהמשתמש עם קוד JavaScript.
שקול את הקידוד הזה:
<p id="הדפס"></p>
<תַסרִיט>
document.getElementById("מִבְחָן").innerHTML = "";
</script>
תאר לעצמך שאתר משתמש בבלוק קוד כמו זה שלמעלה. היזם השתמש כאן בתג "p" הנקרא "הדפס". כפי שניתן לראות מהקוד, ערך יגיע מפרמטר "חיפוש", והמפתח רוצה להציג את הערך הנכנס הזה בתג "p". המפתח שביצע את הפעולה הזו רצה להשתמש בתכונת innerHTML של JavaScript.
עכשיו בואו נסתכל על המצב מנקודת מבטו של תוקף הסייבר. במקרה כזה, התוקף יבצע בדיקת XSS בתוך תג ה"script". לשם כך, התוקף לא צריך להפעיל מחדש את התג, כי תג "script" שכבר נמצא בשימוש. לאחר מכן התוקף יכול לכתוב מבחן כזה:
filename.php? חיפוש=א" עֵרָנִי("ה-XSS!"); f= "
קוד זה יופיע באתר כך:
document.getElementById("מִבְחָן").innerHTML = " א" עֵרָנִי("ה-XSS!"); f="";
ההתקפה הזו תהיה מוצלחת. כדי להבין טוב יותר את הבעיה, הבה נבחן עוד טכניקה דוגמה אחת שתוקף יכול להשתמש בה. ייתכן שההאקר החיל בדיקת XSS כגון:
filename.php? חיפוש=";</script><em>פאטיח</em>
כך זה ייראה בתצוגה מהאתר:
document.getElementById("מִבְחָן").innerHTML = "";</script><em>פאטיח</em>";
זה אולי נראה קצת מוזר מכיוון שהתוקף סגר את תג ה"script" הראשון על ידי שימוש במבנה כמו "/script" כאן. וכך, התוקף יכול להפעיל מחדש כל קוד JavaScript ו-HTML שהוא רוצה.
אם אתה חושב על שתי הדוגמאות השונות הללו, ההגנה מפני XSS נראית די פשוטה. אמצעי הזהירות הדרוש יהיה לקודד את " ו ' תווים שאתה רואה בדוגמה הראשונה. בדוגמה השנייה, קודדו את התווים < ו >.
כיצד למנוע XSS באמצעות DOM
בגרסה זו של XSS, הנתונים שהאתר מקבל מהמשתמש יכולים להפריע למאפיין של רכיב DOM. לדוגמה, מידע הצבע שהאתר מקבל מהמשתמש יכול להשפיע על צבע הרקע של טבלה או על כל הרקע של העמוד. אז המשתמש מתערב מבלי משים בפריסות הסגנון של הגוף והשולחן. הקוד הבא הוא דוגמה טובה לכך:
<גוף bgcolor="<?php echo $_GET['צֶבַע']; ?>"/>
בכך, האתר משתמש בפרמטר "צבע" המתקבל מהמשתמש ישירות במאפיין "bgcolor" של אלמנט "גוף". אז מה יכול תוקף לעשות בשלב זה? הם עלולים להפעיל את הקוד הזדוני הזה:
filename.php? צבע=אדום" onload="עֵרָנִי('ה-XSS!')
זה נראה כך במבט מהאתר:
<גוף bgcolor=" אָדוֹם" onload="עֵרָנִי('ה-XSS!') "/>
כדי למנוע את זה, המפתח יצטרך לקודד את " אופי.
עם זאת, יש לשים לב למרכיב חשוב נוסף ב-JavaScript. קטע הקוד הבא הוא דוגמה לכך:
<a href="javascript: התראה('ה-XSS!')">
זה אומר שאפשר להריץ קוד JavaScript ישירות. אחד מאמצעי המניעה הטובים ביותר הוא לוודא שהאתר בודק האם הנתונים שהוא מקבל מהמשתמשים הם כתובת אתר אמיתית. השיטה הפשוטה ביותר היא לוודא שיש ביטויים כגון "HTTP" ו "HTTPS" (הגרסה המאובטחת של HTTP) בחיבור.
דוגמה לפונקציה למניעת XSS עם PHP
ראית כמה דוגמאות כיצד להגן על אפליקציה או אתר מפני התקפות XSS. אתה יכול להשתמש בקטעי הקוד בטבלה זו עם PHP:
קידוד ב-HTML |
htmlspecialchars($str, ENT_COMPAT) |
קידוד ב-JavaScript ובתכונת DOM |
htmlspecialchars($str, ENT_NOQUOTES) |
בדיקת כתובת URL |
'/^(((https?)|(\/\/))).*/'; |
שים לב שאלו הן רק דוגמאות וישתנו בהתאם לשפת התוכנה שבה אתה משתמש.
אתה יכול ליצור יישום אינטרנט עם PHP ונסה את הקודים שאתה רואה למעלה כדי לשלוח אותם בטקסט. אם אתה תוהה כיצד להשתמש בכל השיטות הללו, אתה יכול לקבל כמה רעיונות מבלוק הקוד של PHP למטה, שאמור להיות שימושי גם אם אתה משתמש בשפה אחרת:
<?php
$data = $_GET['data'];פוּנקצִיָהin_attribute($str){
לַחֲזוֹר htmlspecialchars($str, ENT_COMPAT);
// ENT_COMPAT יקודד את תו המירכאה הכפולה ("").
}
פוּנקצִיָהin_html($str){
$link = '/^(((https?)|(\/\/))).*/';
אם(!preg_match($link, $str))
{
לַחֲזוֹר "/";
}
לַחֲזוֹר $str;
}
$data = in_attribute($data);
$data = in_html($data);
$data = real_url (נתונים);
?>
הגן על האתר שלך מפני XSS ועוד
XSS הוא וקטור התקפה פופולרי המשמש האקרים. בדרך כלל, ערך נתיב בכתובת האתר, כל שדה באתר האינטרנט שלך שבו ניתן להזין נתונים (כגון טפסים ושדות הערות), יכול לשמש כדי לבדוק פגיעות XSS. אבל כמובן, ישנן שיטות רבות ושונות שפושעי סייבר יכולים להשתמש כדי לתקוף אתר, במיוחד אם יש לך אתר שיש בו משתמשים רבים ומסתיר את המידע שלהם.