כיצד למנוע אבטיפוס התקפות זיהום?

Kyzd Lmnw Btypws Htqpwt Zyhwm



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

מדריך זה מסביר את הדרכים למנוע התקפות זיהום אב-טיפוס.







למנוע התקפות זיהום אב טיפוס?

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



בקטע הקוד שלהלן, קוד הזיהום של אב הטיפוס יוזרק:



const y = { א: 1 ,ב: 2 } ;
const data = JSON.parse ( '{'__proto__': { 'faulty': true}}' ) ;

const c = Object.assign ( { } , וכן, נתונים ) ;
console.log ( c.פגום ) ;


התיאור של קטע הקוד שלמעלה:





    • ראשית, הרשימה בשם ' ו ' נוצר והוא מאחסן את הערכים בצמד המפתח-ערך.
    • בעזרת ' -לָכֵן- ', הקוד המזוהם האקראי מיושם בפורמט מפתח-ערך. המפתח מוגדר ל' פָּגוּם ' והערך המוקצה של ' נָכוֹן '.
    • לאחר מכן, הקוד המזוהם זה מוקצה ל' ו רשימה על ידי הפעלת ה-' לְהַקְצוֹת() שיטת ', והרשימה המתקבלת מאוחסנת ברשימה חדשה בשם ' ג '.
    • לבסוף, הקוד המזוהם המוזרק ב' ג הרשימה מאוחזרת והערך שלה מוצג על גבי המסוף. כדי להבטיח שזיהום או נתונים זדוניים הוזרקו.

לאחר ביצוע הקובץ המכיל, הפלט מראה שהקוד הזדוני הוחדר בהצלחה והערך שלו אוחזר:



כיצד למנוע אבטיפוס התקפות זיהום?

ישנן מספר גישות שבאמצעותן ניתן למנוע את מתקפת הזיהום האב-טיפוס:

מיזוגים רקורסיביים לא מאובטחים:

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

שבו מיזוג = ( לוקח , src ) = > {
ל ( תכונות var ב src ) {
אם ( סוג של ( לוקח [ תכונות ] ) === 'חפץ' && סוג של ( src [ תכונות ] ) === 'חפץ' )
{
לְמַזֵג ( לוקח [ תכונות ] , src [ תכונות ] ) ;
} אַחֵר {
לוקח [ תכונות ] = src [ תכונות ] ;
}
}
לַחֲזוֹר לוקח ;
} ;


בקוד למעלה:

    • ראשית, הפונקציה המותאמת אישית ' לְמַזֵג() ' נוצר המקבל שני פרמטרים של מערך ' לוקח ' ו' src '.
    • המשופרת' ל ' לולאה משמשת כדי לחזור על המשתנה ' תכונות 'מעל הנתון' src ' פרמטר.
    • בתוך הלולאה, השתמש ב-' אם ' משפט שמנווט בין שתי השגיאות ואם אלמנט כלשהו השוכן בשני המערכים הוא בעל אותו סוג נתונים. ואז האלמנטים האלה מועברים כפרמטרים לאותו ' לְמַזֵג() פונקציה יוצרת טבע רקורסיבי.
    • אם הסוגים אינם זהים אז, ערך האלמנט שנמצא ב-' src ' מערך הפרמטרים מועבר אל ' לוקח ' פרמטר.
    • סוף - סוף, ה ' לוקח ' מערך פרמטרי מוחזר.

הקפאת אב הטיפוס

מניעה נוספת למתקפות זיהום אב-טיפוס היא הקפאת מחזור הביצוע שלהן. זה נעשה באמצעות ' Object.freeze() ' שיטה. בקטע שלמטה, הקוד המזוהם המוזרק לעיל הולך להיות מוקפא:

const y = { א: 1 ,ב: 2 } ;
const data = JSON.parse ( '{'__proto__': { 'faulty': true}}' ) ;

const c = Object.assign ( { } , וכן, נתונים ) ;
console.log ( c.פגום ) ;

console.log ( אובייקט.הקפאה ( c.פגום ) ) ;
console.log ( Object.isFrozen ( c.פגום ) ) ;


ההסבר של הקוד לעיל מוצג להלן:

    • בתחילה, קוד מזוהם של אב טיפוס דמה הולך להיות מוזרק לרשימת הדמה ' ו ' בדיוק כפי שהוסבר בסעיף לעיל.
    • ואז, המפתח המזוהם שהוזרק ' פָּגוּם ' מועבר ל' הַקפָּאָה() 'שיטה להקפיא את החלק המזוהם.
    • לבסוף, כדי לאשר את חלק האבטיפוס הקפוא של זיהום. ה ' פָּגוּם 'מפתח הרשימה' ג ' מועבר ל' קפוא() ' שיטה. שיטה זו מחזירה ' נָכוֹן 'במקרה של קפוא ו' שֶׁקֶר 'במקרה של ביטול הקפאה:

לאחר ביצוע הקוד המכיל, הפלט מראה שההזרקה, ההקפאה והאימות של קוד מזוהם קפוא:


טיפים נוספים למניעת התקפת זיהום אב-טיפוס

להלן מספר טיפים נוספים שבאמצעותם ניתן למנוע את התקפת הזיהום של אב הטיפוס:

    • האפשרות של ' –disable-proto ' ניתן להשתמש כדי להשבית או להרוג את פעולתו של ' אב טיפוס.__פרוטו__ ' תכונה.
    • אל תשתמש בשיטות בעזרת ' אב טיפוס '.
    • על ידי ' חיטוי קלט המשתמש ' הכולל אימות וסינון קלט משתמש כדי להסיר כל קוד זדוני או מזוהם.
    • שימוש ב ' רשימת הלבנים ', שהיא רשימה של מאפיינים ושיטות מותרים עבור אובייקט. כל ניסיון להגדיר או לקבל מאפיינים או מתודות שאינם חברים ברשימת ההיתרים ייחסמו.

זה הכל על מניעת התקפות זיהום אב-טיפוס ב-Node.js.

סיכום

כדי למנוע התקפות זיהום אב-טיפוס, גישות כמו הימנעות ממיזוגים רקורסיביים לא מאובטחים, הקפאת אב-טיפוס ושימוש ברשימת היתרים כדי למנוע את ' __לָכֵן__ ניתן להשתמש במאפיין מלהיות מוגדר. יחד עם ניצול ' –disable-proto אפשרויות ', הימנעות משימוש ב' אובייקט.אב-טיפוס ', ו' חיטוי קלט המשתמש ' עבור קוד מזוהם. מדריך זה הדגים את מניעת התקפות זיהום אב-טיפוס ב-Nodejs.