Kā novērst prototipu piesārņojuma uzbrukumus?

Ka Noverst Prototipu Piesarnojuma Uzbrukumus



Prototipa piesārņojuma uzbrukums izmanto veidu, kā JavaScript objekti tiek galā ar tiem atbilstošajiem prototipiem. Programmā JavaScript prototipi ir vēl viens objekts, kas definē atlasītā objekta noklusējuma rekvizītus un metodes. Uzbrucējs izmanto prototipa piesārņojumu, šajos prototipos ievadot ļaunprātīgu kodu, manipulējot ar objekta īpašībām vai izmantojot funkciju, kas rekursīvi apvieno objektus.

Šajā rokasgrāmatā ir izskaidroti veidi, kā novērst prototipu piesārņojuma uzbrukumus.







Novērst prototipu piesārņojuma uzbrukumus?

Prototipu piesārņojuma uzbrukumu galvenais iemesls ir tas, ka JavaScript objekti pārmanto īpašības no sava prototipa. Tas nozīmē, ka, ja uzbrucējs prototipā var ievadīt ļaunprātīgu kodu, to mantos visi objekti, kas mantojuši no šī prototipa. Tas noved pie datu zagšanas, patvaļīga koda izpildes vai citu lietojumprogrammu kontroles pārņemšanas.



Tālāk esošajā koda fragmentā tiks ievadīts prototipa piesārņojuma kods:



const y = { a: 1 , b: 2 } ;
const dati = JSON.parse ( '{'__proto__': { 'kļūdains': patiess}}' ) ;

const c = Object.assign ( { } , un, dati ) ;
console.log ( c.bojāts ) ;


Iepriekš minētā koda fragmenta apraksts:





    • Pirmkārt, saraksts ar nosaukumu “ un ” tiek izveidots, un tas saglabā vērtības atslēgu un vērtību pārī.
    • Ar ' -tāpēc- ”, nejaušais piesārņotais kods ir ieviests atslēgas vērtības formātā. Taustiņš ir iestatīts uz “ kļūdains ' un piešķirtā vērtība ' taisnība ”.
    • Pēc tam šis piesārņotais kods tiek piešķirts ' un ' sarakstu, izsaucot ' piešķirt () ' metodi, un iegūtais saraksts tiek saglabāts jaunā sarakstā ar nosaukumu ' c ”.
    • Visbeidzot, ievadītais piesārņotais kods ' c ” saraksts tiek izgūts, un tā vērtība tiek parādīta konsolē. Lai nodrošinātu piesārņojuma vai ļaunprātīgu datu ievadīšanu.

Pēc saturošā faila izpildes izvade parāda, ka ļaunprātīgais kods ir veiksmīgi ievadīts un tā vērtība ir izgūta:



Kā novērst prototipu piesārņojuma uzbrukumus?

Ir vairākas pieejas, ar kurām var novērst prototipa piesārņojuma uzbrukumu:

Nedroši rekursīvi sapludinājumi:

Izvairieties no nedrošas rekursīvas sapludināšanas, jo tās var izraisīt prototipu piesārņojuma uzbrukumus:

kur sapludināt = ( ņem , src ) = > {
priekš ( var atribūti iekšā src ) {
ja ( veids ( ņem [ atribūti ] ) === 'obj' && veids ( src [ atribūti ] ) === 'obj' )
{
sapludināt ( ņem [ atribūti ] , src [ atribūti ] ) ;
} cits {
ņem [ atribūti ] = src [ atribūti ] ;
}
}
atgriezties ņem ;
} ;


Iepriekš minētajā kodā:

    • Pirmkārt, pielāgotā funkcija ' sapludināt () tiek izveidots, kas pieņem divus masīva parametrus ņem ' un ' src ”.
    • Uzlabotais ' priekš 'cilpa tiek izmantota, lai atkārtotu mainīgo' atribūti 'pār sniegto' src ” parametrs.
    • Cilpas iekšpusē izmantojiet ' ja ” paziņojums, kurā tiek parādītas abas kļūdas un ja kādam elementam, kas atrodas abos masīvos, ir vienāds datu tips. Tad šie elementi tiek nodoti kā parametri tam pašam ' sapludināt () ” funkcija, radot rekursīvu raksturu.
    • Ja veidi nav vienādi, elementa vērtība, kas atrodas src ' parametru masīvs tiek nodots ' ņem ” parametrs.
    • Visbeidzot, ' ņem ” tiek atgriezts parametriskais masīvs.

Prototipa iesaldēšana

Vēl viena prototipu piesārņojuma uzbrukumu novēršana ir to izpildes cikla iesaldēšana. Tas tiek darīts, izmantojot ' Object.freeze() ” metode. Tālāk esošajā fragmentā iepriekš ievadītais prototipa piesārņotais kods tiks iesaldēts:

const y = { a: 1 , b: 2 } ;
const dati = JSON.parse ( '{'__proto__': { 'kļūdains': patiess}}' ) ;

const c = Object.assign ( { } , un, dati ) ;
console.log ( c.bojāts ) ;

console.log ( Objekts.iesaldēt ( c.bojāts ) ) ;
console.log ( Object.isFrozen ( c.bojāts ) ) ;


Iepriekš minētā koda skaidrojums ir parādīts zemāk:

    • Sākotnēji manekena prototipa piesārņotais kods tiks ievadīts fiktīvajā sarakstā. un ” tāpat kā paskaidrots iepriekšējā sadaļā.
    • Pēc tam tika ievadīta piesārņotā atslēga ' kļūdains ” tiek nodots iesaldēt () ” metode piesārņotās daļas sasaldēšanai.
    • Visbeidzot, lai apstiprinātu iesaldētā prototipa piesārņojuma daļu. ' kļūdains 'saraksta atslēga' c ” tiek nodots ir sasaldēts () ” metode. Šī metode atgriež ' taisnība ” ja ir sasaldēts un „ viltus ” ja ir atsaldēts:

Pēc saturošā koda izpildes izvade parāda, ka iesaldētā piesārņotā koda ievadīšana, iesaldēšana un pārbaude:


Papildu padomi, kā novērst prototipu piesārņojuma uzbrukumu

Tālāk ir sniegti daži papildu padomi, ar kuriem var novērst prototipa piesārņojuma uzbrukumu:

    • Iespēja ' -izslēgt-proto ' var izmantot, lai atspējotu vai apturētu ' prototips.__proto__ ” īpašums.
    • Neizmantojiet metodes, izmantojot ' prototips ”.
    • Autors “ Lietotāja ievades dezinficēšana ”, kas ietver lietotāja ievades validāciju un filtrēšanu, lai noņemtu jebkādu ļaunprātīgu vai piesārņotu kodu.
    • Izmantošana ' baltais saraksts ”, kas ir objekta atļauto īpašību un metožu saraksts. Visi mēģinājumi iestatīt vai iegūt rekvizītus vai metodes, kas neietilpst baltajā sarakstā, tiks bloķēti.

Tas viss attiecas uz prototipu piesārņojuma uzbrukumu novēršanu vietnē Node.js.

Secinājums

Lai novērstu prototipu piesārņojuma uzbrukumus, izmantojiet tādas pieejas kā izvairīšanās no nedrošas rekursīvas sapludināšanas, prototipa iesaldēšana un baltā saraksta izmantošana, lai novērstu ' __tāpēc__ ” var izmantot īpašumu no iestatīšanas. Kopā ar izmantošanu -izslēgt-proto ' opcijas, izvairoties no ' Objekts.prototips ', un ' lietotāja ievades dezinficēšana ” par piesārņotu kodu. Šajā rokasgrāmatā ir parādīta prototipu piesārņojuma uzbrukumu novēršana Nodejs.