Πώς να αποτρέψετε τις πρωτοτυπικές επιθέσεις ρύπανσης;

Pos Na Apotrepsete Tis Prototypikes Epitheseis Rypanses



Η πρωτότυπη επίθεση ρύπανσης εκμεταλλεύεται τον τρόπο με τον οποίο τα αντικείμενα JavaScript αντιμετωπίζουν τα αντίστοιχα πρωτότυπά τους. Στο JavaScript, τα Prototypes είναι ένα άλλο αντικείμενο που ορίζει τις προεπιλεγμένες ιδιότητες και μεθόδους για το επιλεγμένο αντικείμενο. Ένας εισβολέας εκμεταλλεύεται τη ρύπανση του πρωτοτύπου εισάγοντας κακόβουλο κώδικα σε αυτά τα πρωτότυπα χειραγωγώντας τις ιδιότητες του αντικειμένου ή χρησιμοποιώντας μια συνάρτηση που συγχωνεύει αναδρομικά αντικείμενα.

Αυτός ο οδηγός εξηγεί τους τρόπους αποτροπής πρωτότυπων επιθέσεων ρύπανσης.







Αποτροπή Πρωτότυπων Επιθέσεων Ρύπανσης;

Η βασική αιτία των πρωτοτύπων επιθέσεων ρύπανσης είναι ότι τα αντικείμενα JavaScript κληρονομούν ιδιότητες από το πρωτότυπό τους. Αυτό σημαίνει ότι εάν ένας εισβολέας μπορεί να εισάγει κακόβουλο κώδικα στο πρωτότυπο, θα κληρονομηθεί από όλα τα αντικείμενα που κληρονομήθηκαν από αυτό το πρωτότυπο. Αυτό οδηγεί σε κλοπή δεδομένων, εκτέλεση αυθαίρετου κώδικα ή ανάληψη ελέγχου άλλων εφαρμογών.



Στο παρακάτω απόσπασμα κώδικα, ο πρωτότυπος κώδικας ρύπανσης πρόκειται να εισαχθεί:



const y = { ένα: 1 , β: 2 } ;
const data = JSON.parse ( '{'__proto__': { 'ελαττωματικό': αληθινό}}' ) ;

const c = Αντικείμενο.εκχωρώ ( { } , και, δεδομένα ) ;
console.log ( γ.ελαττωματικός ) ;


Η περιγραφή του παραπάνω αποσπάσματος κώδικα:





    • Πρώτον, η λίστα με το όνομα ' και ” δημιουργείται και αποθηκεύει τις τιμές στο ζεύγος κλειδιού-τιμής.
    • Με τη βοήθεια του ' -επομένως- ”, ο τυχαίος μολυσμένος κώδικας υλοποιείται σε μορφή κλειδιού-τιμής. Το κλειδί έχει οριστεί σε ' ελαττωματικός ' και την εκχωρημένη τιμή του ' αληθής '.
    • Στη συνέχεια, αυτός ο μολυσμένος κωδικός εκχωρείται στο ' και ' λίστα με την επίκληση του ' αναθέτω() ' μέθοδος και η λίστα που προκύπτει αποθηκεύεται σε μια νέα λίστα με το όνομα ' ντο '.
    • Τέλος, ο εισαγόμενος μολυσμένος κώδικας στο « ντο Η λίστα ανακτάται και η τιμή της εμφανίζεται στην κονσόλα. Για να διασφαλιστεί ότι έχουν εισαχθεί ρύπανση ή κακόβουλα δεδομένα.

Μετά την εκτέλεση του αρχείου που περιέχει, η έξοδος δείχνει ότι ο κακόβουλος κώδικας έχει εισαχθεί με επιτυχία και η τιμή του έχει ανακτηθεί:



Πώς να αποτρέψετε τις πρωτοτυπικές επιθέσεις ρύπανσης;

Υπάρχουν διάφορες προσεγγίσεις με τις οποίες μπορεί να αποτραπεί η πρωτότυπη επίθεση ρύπανσης:

Μη ασφαλείς αναδρομικές συγχωνεύσεις:

Αποφύγετε τις ανασφαλείς επαναλαμβανόμενες συγχωνεύσεις γιατί μπορεί να οδηγήσουν σε πρωτότυπες επιθέσεις ρύπανσης:

όπου συγχώνευση = ( παίρνει , src ) = > {
Για ( var χαρακτηριστικά σε src ) {
αν ( του είδους ( παίρνει [ γνωρίσματα ] ) === 'obj' && του είδους ( src [ γνωρίσματα ] ) === 'obj' )
{
συγχώνευση ( παίρνει [ γνωρίσματα ] , src [ γνωρίσματα ] ) ;
} αλλού {
παίρνει [ γνωρίσματα ] = src [ γνωρίσματα ] ;
}
}
ΕΠΙΣΤΡΟΦΗ παίρνει ;
} ;


Στον παραπάνω κώδικα:

    • Πρώτον, η προσαρμοσμένη λειτουργία ' συγχώνευση() Το ' δημιουργείται που δέχεται δύο παραμέτρους πίνακα ' παίρνει ' και ' src '.
    • Το ενισχυμένο « Για 'Ο βρόχος χρησιμοποιείται για την επανάληψη της μεταβλητής' γνωρίσματα “πάνω από το παρεχόμενο” src 'παράμετρος.
    • Μέσα στον βρόχο, χρησιμοποιήστε ένα ' αν Δήλωση που περιηγείται και στα δύο σφάλματα και εάν κάποιο στοιχείο που βρίσκεται και στους δύο πίνακες έχει τον ίδιο τύπο δεδομένων. Στη συνέχεια αυτά τα στοιχεία περνούν ως παράμετροι στο ίδιο ' συγχώνευση() Συνάρτηση δημιουργώντας μια αναδρομική φύση.
    • Εάν οι τύποι δεν είναι ίδιοι τότε, η τιμή του στοιχείου βρίσκεται στο ' src Ο πίνακας παραμέτρων μεταβιβάζεται στο παίρνει 'παράμετρος.
    • Τέλος, το « παίρνει Επιστρέφεται ο παραμετρικός πίνακας.

Πάγωμα του Πρωτότυπου

Μια άλλη πρόληψη για πρωτότυπες επιθέσεις ρύπανσης είναι να παγώσει ο κύκλος εκτέλεσής τους. Αυτό γίνεται μέσω του ' Object.freeze() 'μέθοδος. Στο παρακάτω απόσπασμα, ο παραπάνω πρωτότυπος μολυσμένος κώδικας που εισάγεται θα παγώσει:

const y = { ένα: 1 , β: 2 } ;
const data = JSON.parse ( '{'__proto__': { 'ελαττωματικό': αληθινό}}' ) ;

const c = Αντικείμενο.εκχωρώ ( { } , και, δεδομένα ) ;
console.log ( γ.ελαττωματικός ) ;

console.log ( Αντικείμενο.πάγωμα ( γ.ελαττωματικός ) ) ;
console.log ( Αντικείμενο.isFrozen ( γ.ελαττωματικός ) ) ;


Η εξήγηση του παραπάνω κώδικα φαίνεται παρακάτω:

    • Αρχικά, ο εικονικός πρωτότυπος μολυσμένος κώδικας πρόκειται να εισαχθεί στην εικονική λίστα ' και ” όπως ακριβώς εξηγείται στην παραπάνω ενότητα.
    • Στη συνέχεια, το μολυσμένο κλειδί που εγχύθηκε ' ελαττωματικός ' μεταβιβάζεται στο ' πάγωμα() ” μέθοδος κατάψυξης του μολυσμένου τμήματος.
    • Τέλος, για επιβεβαίωση του παγωμένου πρωτότυπου τμήματος ρύπανσης. Ο ' ελαττωματικός 'κλειδί της λίστας' ντο ' μεταβιβάζεται στο ' είναι παγωμένο() 'μέθοδος. Αυτή η μέθοδος επιστρέφει ' αληθής 'σε περίπτωση παγωμένου και ' ψευδής ” σε περίπτωση μη παγώματος:

Μετά την εκτέλεση του κωδικού που περιέχει, η έξοδος δείχνει ότι η έγχυση, η κατάψυξη και η επαλήθευση παγωμένου μολυσμένου κώδικα:


Πρόσθετες συμβουλές για την πρόληψη της επίθεσης ρύπανσης από πρωτότυπα

Μερικές πρόσθετες συμβουλές χρησιμοποιώντας τις οποίες μπορεί να αποτραπεί η πρωτότυπη επίθεση ρύπανσης αναφέρονται παρακάτω:

    • Η επιλογή του « –απενεργοποίηση-πρωτ Το ' μπορεί να χρησιμοποιηθεί για να απενεργοποιήσει ή να σκοτώσει τη λειτουργία του ' πρωτότυπο.__proto__ ” ιδιοκτησία.
    • Μην χρησιμοποιείτε μεθόδους με τη βοήθεια ' πρωτότυπο '.
    • Με ' Απολύμανση της εισαγωγής χρήστη ” που περιλαμβάνει την επικύρωση και το φιλτράρισμα των δεδομένων χρήστη για την αφαίρεση τυχόν κακόβουλου ή μολυσμένου κώδικα.
    • Χρήση του ' λευκή λίστα ”, η οποία είναι μια λίστα με επιτρεπόμενες ιδιότητες και μεθόδους για ένα αντικείμενο. Οποιεσδήποτε προσπάθειες ορισμού ή λήψης ιδιοτήτων ή μεθόδων που δεν είναι μέλη της λίστας επιτρεπόμενων θα αποκλειστούν.

Αυτό αφορά την πρόληψη πρωτότυπων επιθέσεων ρύπανσης στο Node.js.

συμπέρασμα

Για την αποφυγή επιθέσεων ρύπανσης από πρωτότυπα, προσεγγίσεις όπως η αποφυγή ανασφαλών επαναλαμβανόμενων συγχωνεύσεων, το πάγωμα του πρωτοτύπου και η χρήση μιας λίστας επιτρεπόμενων για την αποτροπή της « __επομένως__ ” μπορεί να χρησιμοποιηθεί η ιδιότητα από τη ρύθμιση. Μαζί με τη χρήση του « –απενεργοποίηση-πρωτ ' επιλογές, αποφεύγοντας τη χρήση ' Αντικείμενο.πρωτότυπο ', και ' απολύμανση της εισαγωγής χρήστη ” για μολυσμένο κώδικα. Αυτός ο οδηγός έχει απεικονίσει την πρόληψη πρωτότυπων επιθέσεων ρύπανσης στο Nodejs.