JS Hoisting
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
U JavaScript jeziku, mehanizam poznat kao Hoisting opisuje gde se deklaracije promenljivih, funkcija, klasa ili uvoza konceptualno podižu na vrh svog opsega pre nego što se kod izvrši. Ovaj proces automatski obavlja JavaScript engine, koji prolazi kroz skriptu u više prolaza.
Tokom prvog prolaza, engine analizira kod kako bi proverio sintaktičke greške i transformiše ga u apstraktno sintaktičko stablo. Ova faza uključuje hoisting, proces u kojem se određene deklaracije premeste na vrh konteksta izvršenja. Ako je faza analize uspešna, što ukazuje na to da nema sintaktičkih grešaka, izvršenje skripte se nastavlja.
Ključno je razumeti da:
Skripta mora biti bez sintaktičkih grešaka da bi došlo do izvršenja. Sintaktička pravila moraju se strogo poštovati.
Postavljanje koda unutar skripte utiče na izvršenje zbog hoistinga, iako se izvršeni kod može razlikovati od svoje tekstualne reprezentacije.
Na osnovu informacija sa MDN-a, postoje četiri različita tipa hoistinga u JavaScript-u:
Value Hoisting: Omogućava korišćenje vrednosti promenljive unutar njenog opsega pre njene deklaracije.
Declaration Hoisting: Omogućava referenciranje promenljive unutar njenog opsega pre njene deklaracije bez izazivanja ReferenceError
, ali će vrednost promenljive biti undefined
.
Ovaj tip menja ponašanje unutar svog opsega zbog deklaracije promenljive pre njene stvarne deklaracione linije.
Sporedni efekti deklaracije se dešavaju pre nego što se ostatak koda koji je sadrži evaluira.
Detaljno, deklaracije funkcija pokazuju ponašanje tipa 1 hoistinga. Ključna reč var
pokazuje ponašanje tipa 2. Lekcionalne deklaracije, koje uključuju let
, const
, i class
, pokazuju ponašanje tipa 3. Na kraju, import
izjave su jedinstvene po tome što se podižu sa ponašanjem tipa 1 i tipa 4.
Dakle, ako imate scenarije gde možete Inject JS code after an undeclared object se koristi, mogli biste fix the syntax tako što ćete ga deklarisati (tako da se vaš kod izvrši umesto da izazove grešku):
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)