Com prevenir els atacs de contaminació de prototips?

Com Prevenir Els Atacs De Contaminacio De Prototips



L'atac de contaminació del prototip explota la manera com els objectes JavaScript tracten els seus prototips corresponents. A JavaScript, els prototips són un altre objecte que defineix les propietats i mètodes predeterminats per a l'objecte seleccionat. Un atacant explota la contaminació del prototip injectant codi maliciós en aquests prototips manipulant les propietats de l'objecte o utilitzant una funció que fusiona objectes de manera recursiva.

Aquesta guia explica les maneres de prevenir atacs de contaminació de prototips.







Prevenir els atacs de contaminació de prototips?

La causa principal dels atacs de contaminació de prototips és que els objectes JavaScript hereten propietats del seu prototip. Això vol dir que si un atacant pot injectar codi maliciós al prototip, serà heretat per tots els objectes que hagin heretat d'aquest prototip. Això comporta el robatori de dades, l'execució de codi arbitrari o el control d'altres aplicacions.



Al fragment de codi següent, s'injectarà el codi de contaminació prototip:



const i = { a: 1 , b: 2 } ;
const data = JSON.parse ( '{'__proto__': { 'defectuós': cert}}' ) ;

const c = Objecte.assignar ( { } , i, data ) ;
console.log ( c.defectuós ) ;


La descripció del fragment de codi anterior:





    • En primer lloc, la llista anomenada ' i ” es crea i emmagatzema els valors al parell clau-valor.
    • Amb l'ajuda de ' -per tant- ”, el codi contaminat aleatori s'implementa en el format clau-valor. La clau està configurada a ' defectuós ” i el valor assignat de “ veritat ”.
    • Aleshores, aquest codi contaminat s'assigna al ' i ', invocant el ' assignar () ” i la llista resultant s'emmagatzema en una llista nova anomenada “ c ”.
    • Finalment, el codi contaminat injectat al ' c ” es recupera la llista i el seu valor es mostra a la consola. Per garantir que s'ha injectat contaminació o dades malicioses.

Després d'executar el fitxer que conté, la sortida mostra que el codi maliciós s'ha injectat correctament i el seu valor s'ha recuperat:



Com prevenir els atacs de contaminació de prototips?

Hi ha diversos enfocaments mitjançant els quals es pot prevenir l'atac de contaminació del prototip:

Fusions recursives insegures:

Eviteu les fusions recursives insegures perquè poden provocar atacs de contaminació prototipus:

on fusiona = ( pren , src ) = > {
per ( atributs var en src ) {
si ( tipus de ( pren [ atributs ] ) === 'obj' && tipus de ( src [ atributs ] ) === 'obj' )
{
fusionar ( pren [ atributs ] , src [ atributs ] ) ;
} altra cosa {
pren [ atributs ] = src [ atributs ] ;
}
}
tornar pren ;
} ;


En el codi anterior:

    • En primer lloc, la funció personalitzada ' combinar () ' es crea que accepta dos paràmetres de matriu ' pren ' i ' src ”.
    • El millorat ' per 'el bucle s'utilitza per iterar la variable ' atributs ' sobre el proporcionat ' src ” paràmetre.
    • Dins del bucle, utilitzeu un ' si ” declaració que navega pels dos errors i si algun element que resideix en ambdues matrius té el mateix tipus de dades. A continuació, aquests elements es passen com a paràmetres al mateix ' combinar () ” funció creant una naturalesa recursiva.
    • Si els tipus no són els mateixos, el valor de l'element que resideix a la ' src ' La matriu de paràmetres es passa a la ' pren ” paràmetre.
    • Finalment, el “ pren ” es retorna la matriu paramètrica.

Congelació del prototip

Una altra prevenció dels atacs de contaminació de prototips és congelar-ne el cicle d'execució. Això es fa mitjançant el ' Object.freeze() ” mètode. Al fragment següent, el codi contaminat prototipat injectat anteriorment es congelarà:

const i = { a: 1 , b: 2 } ;
const data = JSON.parse ( '{'__proto__': { 'defectuós': cert}}' ) ;

const c = Objecte.assignar ( { } , i, data ) ;
console.log ( c.defectuós ) ;

console.log ( Objecte.congelar ( c.defectuós ) ) ;
console.log ( Object.is Frozen ( c.defectuós ) ) ;


L'explicació del codi anterior es mostra a continuació:

    • Inicialment, el codi contaminat del prototip fictici s'injectarà a la llista ficticia ' i ” tal com s'explica a l'apartat anterior.
    • Aleshores, la clau contaminada injectada ' defectuós ' es passa a ' congelar() ” mètode per congelar la part contaminada.
    • Finalment, confirmar la part de contaminació del prototip congelat. El ' defectuós 'clau de llista' c ' es passa a ' està congelat() ” mètode. Aquest mètode retorna ' veritat ' en cas de congelació i ' fals ” en cas de descongelar:

Després d'executar el codi que conté, la sortida mostra que la injecció, la congelació i la verificació del codi contaminat congelat:


Consells addicionals per prevenir l'atac de contaminació de prototips

A continuació s'indiquen alguns consells addicionals per prevenir l'atac de contaminació del prototip:

    • L'opció de ' –desactivar-proto ' es pot utilitzar per desactivar o matar el funcionament del ' prototip.__proto__ ' propietat.
    • No utilitzeu mètodes amb l'ajuda de ' prototip ”.
    • Per ' Higienització de l'entrada de l'usuari ” que implica validar i filtrar l'entrada de l'usuari per eliminar qualsevol codi maliciós o contaminat.
    • Ús de ' llista blanca ”, que és una llista de propietats i mètodes permesos per a un objecte. Es bloquejarà qualsevol intent d'establir o obtenir propietats o mètodes que no siguin membres de la llista blanca.

Això és tot sobre la prevenció d'atacs de contaminació de prototips a Node.js.

Conclusió

Per prevenir els atacs de contaminació de prototips, enfocaments com evitar fusions recursives insegures, congelar el prototip i utilitzar una llista blanca per evitar el ' __per tant__ Es pot utilitzar la propietat des de ser establerta. Juntament amb la utilització de “ –desactivar-proto ”, evitant l'ús de “ Objecte.prototip ”, i “ desinfectant l'entrada de l'usuari ” per codi contaminat. Aquesta guia ha il·lustrat la prevenció de prototips d'atacs de contaminació a Nodejs.