<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PACCHETTI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
Nel linguaggio JavaScript, è descritto un meccanismo noto come **Hoisting** in cui le dichiarazioni di variabili, funzioni, classi o importazioni vengono concettualmente spostate in cima al loro ambito prima dell'esecuzione del codice. Questo processo viene eseguito automaticamente dal motore JavaScript, che attraversa lo script in più passaggi.
Durante il primo passaggio, il motore analizza il codice per verificare la presenza di errori di sintassi e lo trasforma in un albero di sintassi astratta. Questa fase include l'hoisting, un processo in cui alcune dichiarazioni vengono spostate in cima al contesto di esecuzione. Se la fase di analisi ha successo, indicando l'assenza di errori di sintassi, l'esecuzione dello script procede.
1. Lo script deve essere privo di errori di sintassi affinché si verifichi l'esecuzione. Le regole di sintassi devono essere rigorosamente seguite.
2. La posizione del codice all'interno dello script influisce sull'esecuzione a causa dell'hoisting, anche se il codice eseguito potrebbe differire dalla sua rappresentazione testuale.
1.**Value Hoisting**: Consente l'utilizzo del valore di una variabile all'interno del suo ambito prima della sua linea di dichiarazione.
2.**Declaration Hoisting**: Consente di fare riferimento a una variabile all'interno del suo ambito prima della sua dichiarazione senza causare un `ReferenceError`, ma il valore della variabile sarà `undefined`.
3. Questo tipo modifica il comportamento all'interno del suo ambito a causa della dichiarazione della variabile prima della sua effettiva linea di dichiarazione.
4. Gli effetti collaterali della dichiarazione si verificano prima che il resto del codice contenente essa venga valutato.
Nel dettaglio, le dichiarazioni di funzioni mostrano il comportamento del tipo 1 di hoisting. La parola chiave `var` dimostra il comportamento del tipo 2. Le dichiarazioni lessicali, che includono `let`, `const` e `class`, mostrano il comportamento del tipo 3. Infine, le istruzioni `import` sono uniche nel senso che vengono sollevate con entrambi i comportamenti del tipo 1 e del tipo 4.
Pertanto, se hai scenari in cui puoi **Iniettare codice JS dopo l'uso di un oggetto non dichiarato**, potresti **correggere la sintassi** dichiarandolo (in modo che il tuo codice venga eseguito anziché generare un errore):
In addition to the scenarios mentioned earlier, there are a few more scenarios where JavaScript hoisting can be exploited for cross-site scripting (XSS) attacks. Let's take a look at them:
### Scenario 1: Function Declarations
In this scenario, an attacker can use JavaScript hoisting to execute a malicious function declaration. By injecting a script that contains a function declaration, the attacker can manipulate the execution flow of the vulnerable web application.
```javascript
<script>
// Attacker's script
function maliciousFunction() {
// Malicious code here
}
</script>
```
### Scenario 2: Variable Declarations
Similar to function declarations, an attacker can also exploit JavaScript hoisting to execute a malicious variable declaration. By injecting a script that contains a variable declaration, the attacker can control the value of the variable and potentially manipulate the behavior of the web application.
```javascript
<script>
// Attacker's script
var maliciousVariable = "Malicious value";
</script>
```
### Scenario 3: Event Handlers
In this scenario, an attacker can leverage JavaScript hoisting to manipulate event handlers. By injecting a script that modifies an event handler, the attacker can execute arbitrary code when the event is triggered.
JavaScript hoisting can also be used to manipulate object properties. By injecting a script that modifies an object property, the attacker can change the behavior of the web application.
These additional scenarios demonstrate the versatility of JavaScript hoisting in XSS attacks. It is important for web developers to be aware of these vulnerabilities and implement proper security measures to prevent such attacks.
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PACCHETTI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo Telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai repository github di** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).