Hogyan lehet megakadályozni a prototípus szennyezési támadásokat?

Hogyan Lehet Megakadalyozni A Prototipus Szennyezesi Tamadasokat



A prototípus-szennyezési támadás kihasználja azt a módot, ahogy a JavaScript objektumok kezelik a megfelelő prototípusokat. A JavaScriptben a prototípusok egy másik objektum, amely meghatározza a kiválasztott objektum alapértelmezett tulajdonságait és metódusait. A támadó úgy használja ki a prototípus szennyeződését, hogy rosszindulatú kódot fecskendez be ezekbe a prototípusokba az objektum tulajdonságainak manipulálásával vagy olyan funkció használatával, amely rekurzív módon egyesíti az objektumokat.

Ez az útmutató elmagyarázza a prototípus-szennyezés elleni támadások megelőzésének módjait.







Megakadályozza a prototípus-szennyezési támadásokat?

A prototípus-szennyezési támadások kiváltó oka az, hogy a JavaScript objektumok tulajdonságait öröklik a prototípusuktól. Ez azt jelenti, hogy ha egy támadó rosszindulatú kódot tud fecskendezni a prototípusba, azt minden objektum örökli, amely a prototípustól örökölte. Ez adatok ellopásához, tetszőleges kód végrehajtásához vagy más alkalmazások irányításának átvételéhez vezet.



Az alábbi kódrészletben a prototípus szennyezési kódot kell beadni:



const y = { a: 1 , b: 2 } ;
const data = JSON.parse ( '{'__proto__': { 'hibás': igaz}}' ) ;

const c = Object.assign ( { } , és, adatok ) ;
console.log ( c.hibás ) ;


A fenti kódrészlet leírása:





    • Először a „ és ” jön létre, és tárolja az értékeket a kulcs-érték párban.
    • Segítségével ' -ebből adódóan- ”, a véletlenszerű szennyezett kód kulcsérték formátumban kerül megvalósításra. A kulcs a „ hibás ' és a hozzárendelt értéke igaz ”.
    • Ezután ez a szennyezett kód hozzá van rendelve a „ és ' listát a ' hozzárendelni() ” módszerrel, és az eredményül kapott lista egy új listában kerül tárolásra, melynek neve „ c ”.
    • Végül a beinjektált szennyezett kód a „ c ” lista lekérésre kerül, és értéke megjelenik a konzolon. Annak biztosítása érdekében, hogy a szennyezés vagy a rosszindulatú adatok bekerüljenek.

A tartalmazó fájl végrehajtása után a kimenet azt mutatja, hogy a rosszindulatú kód sikeresen befecskendezve, és az értékét lekértük:



Hogyan lehet megakadályozni a prototípus szennyezési támadásokat?

Számos megközelítés létezik a prototípus szennyezési támadás megelőzésére:

Nem biztonságos rekurzív egyesítések:

Kerülje el a bizonytalan rekurzív összevonásokat, mert prototípus szennyezési támadásokhoz vezethetnek:

ahol egyesítés = ( veszi , src ) = > {
számára ( var attribútumok ban ben src ) {
ha ( típusú ( veszi [ attribútumokat ] ) === 'obj' && típusú ( src [ attribútumokat ] ) === 'obj' )
{
összeolvad ( veszi [ attribútumokat ] , src [ attribútumokat ] ) ;
} más {
veszi [ attribútumokat ] = src [ attribútumokat ] ;
}
}
Visszatérés veszi ;
} ;


A fenti kódban:

    • Először is az egyéni funkció összeolvad() ' jön létre, amely két tömbparamétert fogad el ' veszi ” és „ src ”.
    • A továbbfejlesztett „ számára ' ciklus a változó iterálására szolgál ' attribútumokat ' a megadott felett ' src ” paramétert.
    • A hurkon belül használjon egy „ ha ” utasítás, amely mindkét hibában navigál, és ha mindkét tömbben található bármely elem azonos adattípussal rendelkezik. Ezután ezeket az elemeket paraméterként adjuk át ugyanazon ' összeolvad() ” függvény rekurzív jelleget hoz létre.
    • Ha a típusok nem azonosak, akkor a „ src ' paramétertömb átadásra kerül a ' veszi ” paramétert.
    • Végül a „ veszi ” paraméteres tömböt ad vissza.

A prototípus lefagyasztása

A prototípus szennyezési támadások másik megelőzése a végrehajtási ciklus leállítása. Ez a „ Object.freeze() ” módszerrel. Az alábbi részletben a fent beinjektált prototípus szennyezett kód lefagy:

const y = { a: 1 , b: 2 } ;
const data = JSON.parse ( '{'__proto__': { 'hibás': igaz}}' ) ;

const c = Object.assign ( { } , és, adatok ) ;
console.log ( c.hibás ) ;

console.log ( Tárgy.fagy ( c.hibás ) ) ;
console.log ( Object.isFrozen ( c.hibás ) ) ;


A fenti kód magyarázata az alábbiakban látható:

    • Kezdetben ál-prototípus szennyezett kódot fognak beadni a dummy listába. és ” pont a fenti részben leírtak szerint.
    • Ezután a befecskendezett szennyezett kulcs ' hibás ' átkerül a ' fagy() ” módszer a szennyezett rész lefagyasztására.
    • Végül, hogy erősítse meg a fagyasztott prototípus szennyezés része. A ' hibás ' lista kulcsa ' c ' átkerül a ' fagyott() ” módszerrel. Ez a módszer a következőt adja vissza igaz ' fagyott és ' hamis ” nem fagyott állapotban:

A tartalmazó kód végrehajtása után a kimenet azt mutatja, hogy a befagyasztott szennyezett kód befecskendezése, lefagyasztása és ellenőrzése:


További tippek a prototípus-szennyezés támadásainak megelőzésére

Az alábbiakban felsorolunk néhány további tippet, amelyek segítségével megelőzhető a prototípus szennyezési támadás:

    • A „ -disable-proto ' használható a ' prototípus.__proto__ ' ingatlan.
    • Ne használjon módszereket a „ prototípus ”.
    • írta: ' A felhasználói bevitel fertőtlenítése ”, amely magában foglalja a felhasználói bevitel érvényesítését és szűrését a rosszindulatú vagy szennyezett kódok eltávolítása érdekében.
    • Használata ' fehérlista ”, amely egy objektum engedélyezett tulajdonságainak és metódusainak listája. Az engedélyezési listán nem szereplő tulajdonságok vagy metódusok beállítására vagy lekérésére irányuló kísérletek blokkolva lesznek.

Ez minden a Node.js prototípus-szennyezési támadásainak megelőzéséről szól.

Következtetés

A prototípusok által okozott szennyezés elleni támadások megelőzése érdekében olyan megközelítéseket kell alkalmazni, mint a nem biztonságos rekurzív egyesítések elkerülése, a prototípus lefagyasztása és az engedélyezőlista használata a „ __ebből adódóan__ ” tulajdonság használható. A „ -disable-proto ” opciók, elkerülve a „ Objektum.prototípus ”, és „ a felhasználói bevitel fertőtlenítése ” a szennyezett kódhoz. Ez az útmutató bemutatja a prototípus szennyezési támadások megelőzését a Nodejs-ben.