Kako preprečiti prototipne napade onesnaženja?

Kako Prepreciti Prototipne Napade Onesnazenja



Napad z onesnaževanjem prototipa izkorišča način, kako objekti JavaScript obravnavajo svoje ustrezne prototipe. V JavaScriptu so prototipi še en predmet, ki definira privzete lastnosti in metode za izbrani predmet. Napadalec izkoristi onesnaženje prototipa tako, da v te prototipe vbrizga zlonamerno kodo z manipulacijo lastnosti predmeta ali z uporabo funkcije, ki rekurzivno združuje predmete.

Ta priročnik razlaga načine za preprečevanje napadov onesnaževanja prototipov.







Preprečiti prototipne napade onesnaženja?

Glavni vzrok napadov onesnaženja prototipa je, da objekti JavaScript podedujejo lastnosti svojega prototipa. To pomeni, da če lahko napadalec vstavi zlonamerno kodo v prototip, jo bodo podedovali vsi objekti, ki so podedovali od tega prototipa. To vodi do kraje podatkov, izvajanja poljubne kode ali prevzema nadzora nad drugimi aplikacijami.



V spodnjem delčku kode bo vstavljena prototipna koda onesnaževanja:



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

const c = Object.assign ( { } , in podatki ) ;
console.log ( c.napačen ) ;


Opis zgornjega delčka kode:





    • Najprej seznam z imenom » in ” se ustvari in shrani vrednosti v par ključ-vrednost.
    • S pomočjo ' -zato- «, je naključna onesnažena koda implementirana v formatu ključ-vrednost. Ključ je nastavljen na ' pokvarjen « in dodeljena vrednost » prav ”.
    • Nato je ta onesnažena koda dodeljena ' in ' tako, da prikličete ' dodeli() ' in dobljeni seznam je shranjen v novem seznamu z imenom ' c ”.
    • Končno, vbrizgana onesnažena koda v ' c ” se pridobi seznam in njegova vrednost je prikazana na konzoli. Za zagotovitev, da so bili vneseni onesnaženi ali zlonamerni podatki.

Po izvedbi vsebovalne datoteke izhod pokaže, da je bila zlonamerna koda uspešno vbrizgana in da je bila njena vrednost pridobljena:



Kako preprečiti prototipne napade onesnaženja?

Obstaja več pristopov, s katerimi je mogoče preprečiti prototipni napad onesnaženja:

Nevarna rekurzivna spajanja:

Izogibajte se nevarnim rekurzivnim združevanjem, ker lahko vodijo do napadov onesnaženja prototipa:

kjer združi = ( vzame , src ) = > {
za ( atributi var v src ) {
če ( tip ( vzame [ lastnosti ] ) === 'obj' && tip ( src [ lastnosti ] ) === 'obj' )
{
združiti ( vzame [ lastnosti ] , src [ lastnosti ] ) ;
} drugače {
vzame [ lastnosti ] = src [ lastnosti ] ;
}
}
vrnitev vzame ;
} ;


V zgornji kodi:

    • Najprej funkcija po meri ' združi () ' je ustvarjen, ki sprejme dva parametra polja ' vzame « in » src ”.
    • Izboljšana ' za ' zanka se uporablja za ponavljanje spremenljivke ' lastnosti »nad predvidenim« src ” parameter.
    • Znotraj zanke uporabite ' če ” stavek, ki krmari po obeh napakah in če ima kateri koli element, ki se nahaja v obeh nizih, isti podatkovni tip. Nato se ti elementi kot parametri posredujejo istemu ' združi () ” ustvarjanje rekurzivne narave.
    • Če vrsti nista enaki, bo vrednost elementa v ' src ” niz parametrov se posreduje v vzame ” parameter.
    • Končno, ' vzame ” se vrne parametrično polje.

Zamrznitev prototipa

Druga preventiva za prototipne napade onesnaženja je zamrznitev njihovega izvajalnega cikla. To se naredi prek » Object.freeze() ” metoda. V spodnjem delčku bo zgoraj vstavljena prototipna onesnažena koda zamrznjena:

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

const c = Object.assign ( { } , in podatki ) ;
console.log ( c.napačen ) ;

console.log ( Objekt.zamrznitev ( c.napačen ) ) ;
console.log ( Object.isFrozen ( c.napačen ) ) ;


Razlaga zgornje kode je prikazana spodaj:

    • Sprva bo navidezni prototip onesnažene kode vstavljen v navidezni seznam ' in « tako kot je razloženo v zgornjem razdelku.
    • Nato vbrizgani onesnaženi ključ ' pokvarjen « se posreduje v » zamrzni () ” za zamrzovanje onesnaženega dela.
    • Nazadnje, za potrditev zamrznjenega dela onesnaževanja prototipa. ' pokvarjen 'ključ seznama' c « se posreduje v » isFrozen() ” metoda. Ta metoda vrne ' prav ' v primeru zamrznjenega in ' lažno ” v primeru nezamrznjenega:

Po izvedbi vsebovalne kode izhod pokaže, da so vbrizgavanje, zamrzovanje in preverjanje zamrznjene onesnažene kode:


Dodatni nasveti za preprečevanje napada prototipa onesnaženja

Nekaj ​​dodatnih nasvetov, s katerimi je mogoče preprečiti napad onesnaženja prototipa, je navedenih spodaj:

    • Možnost ' –onemogoči-proto ' se lahko uporabi za onemogočanje ali uničenje delovanja ' prototip.__proto__ ” lastnina.
    • Ne uporabljajte metod s pomočjo ' prototip ”.
    • od “ Saniranje uporabniškega vnosa «, ki vključuje preverjanje in filtriranje uporabniškega vnosa za odstranitev zlonamerne ali onesnažene kode.
    • Uporaba ' beli seznam «, ki je seznam dovoljenih lastnosti in metod za objekt. Vsi poskusi nastavitve ali pridobivanja lastnosti ali metod, ki niso člani seznama dovoljenih, bodo blokirani.

To je vse o preprečevanju prototipnih napadov onesnaženja v Node.js.

Zaključek

Za preprečevanje napadov onesnaženja prototipa so pristopi, kot so izogibanje nevarnim rekurzivnim združevanjem, zamrznitev prototipa in uporaba seznama dovoljenih za preprečevanje » __zato__ ” se lahko uporabi lastnost, ki ni nastavljena. Skupaj z uporabo ' –onemogoči-proto ', izogibanje uporabi ' Objekt.prototip «, in » čiščenje uporabniškega vnosa ” za onesnaženo kodo. Ta vodnik je ponazoril preprečevanje prototipnih napadov onesnaženja v Nodejs.