JS Hoisting
Taarifa Msingi
Katika lugha ya JavaScript, kuna mchakato unaojulikana kama Hoisting ambapo matangazo ya variables, functions, classes, au imports yanapandishwa kwa kiwango cha juu cha wigo wao kabla ya nambari kutekelezwa. Mchakato huu unatekelezwa moja kwa moja na injini ya JavaScript, ambayo hupitia skripti kwa njia kadhaa.
Katika hatua ya kwanza, injini huchambua nambari ili kuchunguza makosa ya sintaksia na kuiweka katika muundo wa sintaksia ya kubuni. Hatua hii ni pamoja na hoisting, mchakato ambapo matangazo fulani yanahamishwa hadi kwenye muktadha wa utekelezaji. Ikiwa hatua ya uchambuzi inafanikiwa, ikionyesha hakuna makosa ya sintaksia, utekelezaji wa skripti unaendelea.
Ni muhimu kuelewa kwamba:
Skripti lazima iwe bila makosa ya sintaksia ili utekelezaji ufanyike. Sheria za sintaksia lazima zifuatwe kikamilifu.
Mahali pa nambari ndani ya skripti huathiri utekelezaji kutokana na hoisting, ingawa nambari inayotekelezwa inaweza kutofautiana na uwakilishi wake wa maandishi.
Aina za Hoisting
Kulingana na habari kutoka MDN, kuna aina nne tofauti za hoisting katika JavaScript:
Value Hoisting: Inawezesha matumizi ya thamani ya variable ndani ya wigo wake kabla ya mstari wa tangazo lake.
Declaration Hoisting: Inaruhusu kutaja variable ndani ya wigo wake kabla ya tangazo lake bila kusababisha
ReferenceError
, lakini thamani ya variable itakuwaundefined
.Aina hii inabadilisha tabia ndani ya wigo wake kutokana na tangazo la variable kabla ya mstari wake wa tangazo halisi.
Athari za tangazo hufanyika kabla ya nambari iliyobaki inayolihusisha kuhesabiwa.
Kwa undani, matangazo ya functions huonyesha tabia ya hoisting ya aina ya 1. Neno la msimbo var
linaonyesha tabia ya aina ya 2. Matangazo ya kisarufi, ambayo ni pamoja na let
, const
, na class
, huonyesha tabia ya aina ya 3. Hatimaye, taarifa za import
ni za kipekee kwa kuwa zinapandishwa na tabia za aina ya 1 na aina ya 4.
Mazingira
Hivyo ikiwa una mazingira ambapo unaweza Kuingiza nambari ya JS baada ya kutumia kitu ambacho hakijatangazwa, unaweza kurekebisha sintaksia kwa kulitangaza (hivyo nambari yako inatekelezwa badala ya kutoa kosa):
Hali Zaidi
Scenario 1: JavaScript Hoisting
Skenario 1: Kusimamishwa kwa JavaScript
In this scenario, the attacker injects malicious JavaScript code into a vulnerable web application. The code is executed by the victim's browser, allowing the attacker to perform various actions on behalf of the victim.
Katika hali hii, mshambuliaji anaingiza kificho cha JavaScript chenye nia mbaya katika programu ya wavuti inayoweza kudhurika. Kificho hicho kinatekelezwa na kivinjari cha mwathiriwa, kuruhusu mshambuliaji kufanya vitendo mbalimbali kwa niaba ya mwathiriwa.
The attacker takes advantage of JavaScript hoisting, which is a behavior in JavaScript where variable and function declarations are moved to the top of their containing scope during the compilation phase. This allows the attacker to use variables and functions before they are actually declared.
Mshambuliaji anatumia kusimamishwa kwa JavaScript, ambayo ni tabia katika JavaScript ambapo matangazo ya pembejeo na kazi yanahamishwa hadi juu ya wigo wao unaohusika wakati wa hatua ya uundaji. Hii inamruhusu mshambuliaji kutumia pembejeo na kazi kabla hazijatangazwa kwa kweli.
To exploit this vulnerability, the attacker crafts a payload that includes a function declaration and a variable assignment. When the vulnerable web application executes the payload, the function and variable are hoisted to the top of their scope, allowing the attacker to manipulate the behavior of the application.
Ili kutumia udhaifu huu, mshambuliaji anatengeneza mzigo ambao una tangazo la kazi na kutoa thamani kwa pembejeo. Wakati programu ya wavuti inayoweza kudhurika inatekeleza mzigo, kazi na pembejeo zinasimamishwa hadi juu ya wigo wao, kuruhusu mshambuliaji kubadilisha tabia ya programu.
Example Payload
Mfano wa Mzigo
Explanation
Maelezo
In this example, the attacker injects a script tag containing JavaScript code into a vulnerable input field. The code declares a function called myFunction
that returns the string "Hello, World!". The function is then called immediately after its declaration, resulting in an alert displaying the message "Hello, World!".
Katika mfano huu, mshambuliaji anaingiza lebo ya skripti inayojumuisha kificho cha JavaScript katika uga wa pembejeo unaoweza kudhurika. Kificho kinatangaza kazi inayoitwa myFunction
ambayo inarudisha herufi "Hello, World!". Kazi hiyo inaitwa mara moja baada ya tangazo lake, ikisababisha onyo kuonyesha ujumbe "Hello, World!".
Impact
Athari
By exploiting JavaScript hoisting, the attacker can execute arbitrary JavaScript code within the context of the vulnerable web application. This can lead to various consequences, such as stealing sensitive information, performing unauthorized actions, or even taking control of the victim's account.
Kwa kutumia kusimamishwa kwa JavaScript, mshambuliaji anaweza kutekeleza kificho cha JavaScript cha aina yoyote ndani ya muktadha wa programu ya wavuti inayoweza kudhurika. Hii inaweza kusababisha matokeo mbalimbali, kama vile kuiba habari nyeti, kufanya vitendo visivyoruhusiwa, au hata kuchukua udhibiti wa akaunti ya mwathiriwa.
Marejeo
Last updated