Hur kan man förhindra prototypföroreningsattacker?

Hur Kan Man Forhindra Prototypfororeningsattacker



Prototypföroreningsattacken utnyttjar hur JavaScript-objekt hanterar sina motsvarande prototyper. I JavaScript är prototyper ett annat objekt som definierar standardegenskaperna och metoderna för det valda objektet. En angripare utnyttjar prototypföroreningen genom att injicera skadlig kod i dessa prototyper genom att manipulera objektets egenskaper eller genom att använda en funktion som rekursivt slår samman objekt.

Den här guiden förklarar sätten att förhindra prototyper av föroreningsattacker.







Förhindra prototypföroreningsattacker?

Grundorsaken till prototypföroreningsattacker är att JavaScript-objekt ärver egenskaper från sin prototyp. Detta betyder att om en angripare kan injicera skadlig kod i prototypen, kommer den att ärvas av alla objekt som ärvt från den prototypen. Detta leder till att man stjäl data, exekverar godtycklig kod eller tar kontroll över andra applikationer.



I kodavsnittet nedan kommer prototypen för föroreningskoden att injiceras:



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

const c = Objekt.tilldela ( { } , och, data ) ;
console.log ( c. felaktig ) ;


Beskrivningen av ovanstående kodavsnitt:





    • Först, listan med namnet ' och ” skapas och den lagrar värdena i nyckel-värdeparet.
    • Med hjälp av ' -därför- ”, implementeras den slumpmässiga förorenade koden i nyckel-värde-formatet. Nyckeln är inställd på ' felaktig ' och det tilldelade värdet för ' Sann ”.
    • Sedan tilldelas denna förorenade kod till ' och '-listan genom att anropa ' tilldela() '-metoden, och den resulterande listan lagras i en ny lista med namnet ' c ”.
    • Slutligen, den injicerade förorenade koden i ' c ”-listan hämtas och dess värde visas över konsolen. För att säkerställa att föroreningar eller skadlig data har injicerats.

Efter exekvering av den innehållande filen visar utdata att den skadliga koden har injicerats framgångsrikt och dess värde har hämtats:



Hur kan man förhindra prototypföroreningsattacker?

Det finns flera tillvägagångssätt genom vilka prototypföroreningsattacken kan förhindras:

Osäkra rekursiva sammanslagningar:

Undvik de osäkra rekursiva sammanslagningarna eftersom de kan leda till prototypföroreningsattacker:

var merge = ( tar , src ) = > {
för ( var attribut i src ) {
om ( sorts ( tar [ attribut ] ) === 'obj' && sorts ( src [ attribut ] ) === 'obj' )
{
sammanfoga ( tar [ attribut ] , src [ attribut ] ) ;
} annan {
tar [ attribut ] = src [ attribut ] ;
}
}
lämna tillbaka tar ;
} ;


I ovanstående kod:

    • Först den anpassade funktionen ' sammanfoga() ' skapas som accepterar två arrayparametrar ' tar ' och ' src ”.
    • Den förbättrade ' för ' loop används för att iterera variabeln ' attribut ' över det tillhandahållna ' src ' parameter.
    • Inne i slingan, använd en ' om ”-sats som navigerar genom båda felen och om något element som finns i båda arrayerna har samma datatyp. Sedan skickas dessa element som parametrar till samma ' sammanfoga() ” funktion som skapar en rekursiv natur.
    • Om typerna inte är desamma kommer elementvärdet som finns i ' src ' parametermatris skickas till ' tar ' parameter.
    • Slutligen, ' tar ” parametrisk array returneras.

Fryser prototypen

Ett annat förhindrande för prototyper av föroreningsattacker är att frysa deras avrättningscykel. Detta görs via ' Object.freeze() 'metoden. I avsnittet nedan kommer den ovan injicerade prototypade förorenade koden att frysas:

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

const c = Objekt.tilldela ( { } , och, data ) ;
console.log ( c. felaktig ) ;

console.log ( Objekt.frysa ( c. felaktig ) ) ;
console.log ( Objekt.ärFryst ( c. felaktig ) ) ;


Förklaringen av ovanstående kod visas nedan:

    • Inledningsvis kommer dummy-prototyp förorenad kod att injiceras i dummylistan ' och ” precis som förklarat i avsnittet ovan.
    • Sedan, den injicerade förorenade nyckeln ' felaktig ' skickas till ' frysa() ” metod för att frysa den förorenade delen.
    • Slutligen, för att bekräfta den frusna prototypen föroreningsdelen. den ' felaktig 'listans nyckel' c ' skickas till ' är frusen() 'metoden. Denna metod returnerar ' Sann ' vid frysta och ' falsk ” vid uppfryst:

Efter exekvering av den innehållande koden visar utdata att injektion, frysning och verifiering av frusen förorenad kod:


Ytterligare tips för att förhindra prototypföroreningsattack

Några ytterligare tips med hjälp av vilka prototypen föroreningsattack kan förhindras anges nedan:

    • Alternativet ' –inaktivera-proto ' kan användas för att inaktivera eller döda funktionen för ' prototyp.__proto__ ' fast egendom.
    • Använd inte metoder med hjälp av ' prototyp ”.
    • Förbi ' Sanering av användarinmatning ” som involverar validering och filtrering av användarinmatning för att ta bort eventuell skadlig eller förorenad kod.
    • Användning av ' vitlista ”, som är en lista över tillåtna egenskaper och metoder för ett objekt. Alla försök att ställa in eller hämta egenskaper eller metoder som inte är medlem i vitlistan kommer att blockeras.

Det handlar om att förhindra prototyper av föroreningsattacker i Node.js.

Slutsats

För att förhindra prototypföroreningsattacker, tillvägagångssätt som undvikande av osäkra rekursiva sammanslagningar, frysning av prototypen och användning av en vitlista för att förhindra ' __därför__ ” egendom från att vara inställd kan användas. Tillsammans med användningen av ' –inaktivera-proto '-alternativ, undvik användningen av ' Objekt.prototyp ', och ' sanera användarinmatningen ” för förorenad kod. Denna guide har illustrerat förebyggandet av prototyper av föroreningsattacker i Nodejs.