Како спречити прототипне нападе загађења?

Kako Spreciti Prototipne Napade Zagadena



Напад загађења прототипа користи начин на који се ЈаваСцрипт објекти баве својим одговарајућим прототиповима. У ЈаваСцрипт-у, прототипови су још један објекат који дефинише подразумевана својства и методе за изабрани објекат. Нападач искоришћава загађење прототипа убризгавањем злонамерног кода у ове прототипове манипулисањем својствима објекта или коришћењем функције која рекурзивно спаја објекте.

Овај водич објашњава начине за спречавање прототипних напада загађења.







Спречити нападе прототипа загађења?

Основни узрок напада загађења прототипа је тај што ЈаваСцрипт објекти наслеђују својства од свог прототипа. То значи да ако нападач може да убаци злонамерни код у прототип, он ће бити наслеђен од свих објеката који су наследили од тог прототипа. Ово доводи до крађе података, извршавања произвољног кода или преузимања контроле над другим апликацијама.



У доњем исечку кода, прототип кода загађења ће бити убризган:



цонст и = { а: 1 , б: 2 } ;
цонст дата = ЈСОН.парсе ( '{'__прото__': { 'фаулти': труе}}' ) ;

цонст ц = Објецт.ассигн ( { } , и, подаци ) ;
цонсоле.лог ( ц.неисправан ) ;


Опис горњег исечка кода:





    • Прво, листа под називом „ и ” се креира и чува вредности у пару кључ/вредност.
    • Уз помоћ ' - дакле- “, насумични загађени код је имплементиран у формату кључ/вредност. Кључ је постављен на „ неисправан ” и додељена вредност „ истина ”.
    • Затим, овај загађени код се додељује „ и ” листу позивањем на „ додели() ” метод, а резултирајућа листа се чува у новој листи под називом „ ц ”.
    • Коначно, убризгани загађени код у „ ц ” листа се преузима и њена вредност се приказује преко конзоле. Да би се осигурало да су загађени или злонамерни подаци убризгани.

Након извршавања датотеке која садржи, излаз показује да је злонамерни код успешно убачен и да је његова вредност преузета:



Како спречити прототипне нападе загађења?

Постоји неколико приступа помоћу којих се може спречити прототип загађења:

Небезбедно рекурзивно спајање:

Избегавајте несигурна рекурзивна спајања јер могу довести до прототипних напада загађења:

где спајање = ( узима , срц ) = > {
за ( вар атрибути ин срц ) {
ако ( тип ( узима [ атрибути ] ) === 'обј' && тип ( срц [ атрибути ] ) === 'обј' )
{
спојити ( узима [ атрибути ] , срц [ атрибути ] ) ;
} друго {
узима [ атрибути ] = срц [ атрибути ] ;
}
}
повратак узима ;
} ;


У горњем коду:

    • Прво, прилагођена функција “ споји() ” је креиран који прихвата два параметра низа “ узима ' и ' срц ”.
    • Побољшани „ за ” петља се користи за понављање променљиве “ атрибути “ преко обезбеђеног “ срц ” параметар.
    • Унутар петље, користите „ ако ” наредба која се креће кроз обе грешке и ако било који елемент који се налази у оба низа има исти тип података. Затим се ти елементи прослеђују као параметри истом „ споји() ” функција која ствара рекурзивну природу.
    • Ако типови тада нису исти, вредност елемента која се налази у „ срц ” низ параметара се прослеђује у „ узима ” параметар.
    • Коначно, „ узима ” се враћа параметарски низ.

Замрзавање прототипа

Још једна превенција за прототипне нападе загађења је замрзавање њиховог циклуса извршења. Ово се ради преко „ Објецт.фреезе() ” метод. У доњем исечку, горе убризгани прототип загађеног кода ће бити замрзнут:

цонст и = { а: 1 , б: 2 } ;
цонст дата = ЈСОН.парсе ( '{'__прото__': { 'фаулти': труе}}' ) ;

цонст ц = Објецт.ассигн ( { } , и, подаци ) ;
цонсоле.лог ( ц.неисправан ) ;

цонсоле.лог ( Објекат.замрзнути ( ц.неисправан ) ) ;
цонсоле.лог ( Објецт.исФрозен ( ц.неисправан ) ) ;


Објашњење горњег кода је приказано у наставку:

    • У почетку ће лажни прототип загађеног кода бити убачен у лажну листу ' и ” баш као што је објашњено у горњем одељку.
    • Затим, убризгани загађени кључ “ неисправан ” се преноси на „ замрзнути () ” метода за замрзавање загађеног дела.
    • Коначно, да потврдимо замрзнути прототип загађења. „ неисправан ” кључ листе “ ц ” се преноси на „ је замрзнут() ” метод. Овај метод враћа „ истина “ у случају замрзнутог и “ лажно ” у случају одмрзнутог:

Након извршавања кода који садржи, излаз показује да је убризгавање, замрзавање и верификација замрзнутог загађеног кода:


Додатни савети за спречавање напада прототипа загађења

Неки додатни савети помоћу којих се може спречити напад прототипа загађења су наведени у наставку:

    • Опција „ –онемогући-прото ” се може користити за онемогућавање или укидање рада „ прототип.__прото__ ' имовина.
    • Немојте користити методе уз помоћ „ прототип ”.
    • Од стране ' Санитизација корисничког уноса ” који укључује валидацију и филтрирање корисничког уноса како би се уклонио злонамерни или загађени код.
    • Употреба ' бела листа “, што је листа дозвољених својстава и метода за објекат. Сви покушаји постављања или добијања својстава или метода који нису чланови беле листе биће блокирани.

То је све о превенцији прототипних напада загађења у Ноде.јс.

Закључак

Да би се спречили напади загађења прототипа, приступи као што су избегавање несигурних рекурзивних стапања, замрзавање прототипа и коришћење беле листе за спречавање „ __због тога__ ” својство из постављања може се користити. Уз коришћење „ –онемогући-прото ” опције, избегавајући употребу „ Објекат.прототип ', и ' дезинфекција корисничког уноса ” за загађени код. Овај водич је илустровао превенцију прототипских напада загађења у Нодејс-у.