Kuidas vältida prototüüpide saasterünnakuid?

Kuidas Valtida Prototuupide Saasterunnakuid



Prototüübi saasterünnak kasutab ära seda, kuidas JavaScripti objektid vastavate prototüüpidega tegelevad. JavaScriptis on prototüübid veel üks objekt, mis määratleb valitud objekti vaikeomadused ja -meetodid. Ründaja kasutab prototüübi saastet ära, süstides nendesse prototüüpidesse pahatahtlikku koodi, manipuleerides objekti omadustega või kasutades funktsiooni, mis liidab objekte rekursiivselt.

See juhend selgitab prototüüpide saasterünnakute ärahoidmise viise.







Kas vältida prototüüpide saasterünnakuid?

Prototüüpide saasterünnakute algpõhjus on see, et JavaScripti objektid pärivad omadused oma prototüübilt. See tähendab, et kui ründaja suudab prototüüpi pahatahtlikku koodi sisestada, pärivad selle kõik sellelt prototüübilt päritud objektid. See toob kaasa andmete varastamise, suvalise koodi käivitamise või teiste rakenduste kontrolli võtmise.



Allolevasse koodilõigu sisestatakse prototüübi saastekood:



const y = { a: 1 , b: 2 } ;
const andmed = JSON.parse ( '{'__proto__': { 'vigane': tõsi}}' ) ;

const c = Object.assign ( { } , ja, andmed ) ;
console.log ( c.vigane ) ;


Ülaltoodud koodilõigu kirjeldus:





    • Esiteks loend nimega ' ja ” luuakse ja see salvestab väärtused võtme-väärtuste paari.
    • abiga ' -seega- ”, juhuslik saastunud kood on realiseeritud võtmeväärtuse vormingus. võti on seatud ' vigane ' ja määratud väärtus ' tõsi ”.
    • Seejärel määratakse see saastunud kood ' ja ' nimekirja, kutsudes esile ' määra() ' meetodit ja saadud loend salvestatakse uude loendisse nimega ' c ”.
    • Lõpuks sisestatud saastunud kood jaotises ' c ” loend tuuakse alla ja selle väärtus kuvatakse konsooli kohal. Et tagada reostuse või pahatahtlike andmete sisestamine.

Pärast sisaldava faili käivitamist näitab väljund, et pahatahtlik kood on edukalt sisestatud ja selle väärtus on kätte saadud:



Kuidas vältida prototüüpide saasterünnakuid?

Prototüübi saasterünnakut saab ära hoida mitmel viisil:

Ebaturvalised rekursiivsed liitmised:

Vältige ebaturvalisi rekursiivseid liitmisi, sest need võivad viia prototüübi saasterünnakuteni:

kus ühenda = ( võtab , src ) = > {
jaoks ( var atribuudid sisse src ) {
kui ( tüüp ( võtab [ atribuudid ] ) === 'obj' && tüüp ( src [ atribuudid ] ) === 'obj' )
{
liita ( võtab [ atribuudid ] , src [ atribuudid ] ) ;
} muidu {
võtab [ atribuudid ] = src [ atribuudid ] ;
}
}
tagasi võtab ;
} ;


Ülaltoodud koodis:

    • Esiteks kohandatud funktsioon ' ühenda() luuakse, mis aktsepteerib kahte massiivi parameetrit võtab ” ja „ src ”.
    • Täiustatud ' jaoks ' tsüklit kasutatakse muutuja itereerimiseks ' atribuudid ' üle pakutud ' src ” parameeter.
    • Silmuse sees kasutage ' kui ” avaldus, mis liigub läbi mõlema vea ja kui mõlemas massiivis oleval elemendil on sama andmetüüp. Seejärel edastatakse need elemendid parameetritena samale ' ühenda() ” funktsioon, mis loob rekursiivse olemuse.
    • Kui tüübid ei ole samad, siis elemendi väärtus, mis asub ' src ' parameetri massiiv edastatakse ' võtab ” parameeter.
    • Lõpuks ' võtab ” parameetriline massiiv tagastatakse.

Prototüübi külmutamine

Teine prototüüpide saasterünnakute ennetamine on nende täitmistsükli külmutamine. Seda tehakse ' Object.freeze() ” meetod. Allolevas väljavõttes külmutatakse ülaltoodud prototüüpne saastunud kood:

const y = { a: 1 , b: 2 } ;
const andmed = JSON.parse ( '{'__proto__': { 'vigane': tõsi}}' ) ;

const c = Object.assign ( { } , ja, andmed ) ;
console.log ( c.vigane ) ;

console.log ( Object.freeze ( c.vigane ) ) ;
console.log ( Object.isFrozen ( c.vigane ) ) ;


Ülaltoodud koodi selgitus on näidatud allpool:

    • Esialgu sisestatakse näiv prototüübi saastunud kood näivloendisse ' ja ” just nagu ülaltoodud jaotises selgitatud.
    • Seejärel süstiti saastunud võti ' vigane ' edastatakse jaotisele ' külmutada () ” meetod saastunud osa külmutamiseks.
    • Lõpuks, et kinnitada külmutatud prototüübi saasteosa. ' vigane ' loendi võti ' c ' edastatakse jaotisele ' on külmunud() ” meetod. See meetod tagastab ' tõsi ' külmunud ja ' vale ” külmutamata kujul:

Pärast sisaldava koodi käivitamist näitab väljund, et külmutatud saastunud koodi süstimine, külmutamine ja kontrollimine:


Täiendavad näpunäited prototüübi reostusrünnaku ärahoidmiseks

Allpool on toodud mõned täiendavad näpunäited, mille abil saab prototüübi saasterünnakut ära hoida:

    • Valik ' -proto keelamine ' saab kasutada seadme 'töötamise keelamiseks või lõpetamiseks prototüüp.__proto__ ” vara.
    • Ärge kasutage meetodeid abiga ' prototüüp ”.
    • Kõrval ' Kasutaja sisendi puhastamine ”, mis hõlmab kasutaja sisendi valideerimist ja filtreerimist, et eemaldada pahatahtlik või saastunud kood.
    • Kasutamine ' valge nimekiri ”, mis on objekti lubatud omaduste ja meetodite loend. Kõik katsed seada või hankida atribuute või meetodeid, mis ei kuulu valgesse nimekirja, blokeeritakse.

See kõik puudutab Node.js-i prototüüpide saasterünnakute vältimist.

Järeldus

Prototüübi saasterünnakute vältimiseks kasutatakse selliseid lähenemisviise nagu ebaturvaliste rekursiivsete liitmiste vältimine, prototüübi külmutamine ja valge nimekirja kasutamine, et vältida ' __seepärast__ ” saab kasutada seadistatud atribuuti. Koos ' -proto keelamine ' valikud, vältides '' kasutamist Objekt.prototüüp ”, ja „ kasutaja sisendi puhastamine ” saastunud koodi jaoks. See juhend on illustreerinud prototüüpide saasterünnakute ennetamist Nodejsis.