XSS
Esempio di Codice Vulnerabile
Esempio di Codice Vulnerabile
Supponiamo di avere una semplice form in HTML che permette agli utenti di inserire il loro nome, con il nome poi visualizzato in una pagina PHP senza sanificazione.
Codice HTML (index.html)
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<title>Form XSS Vulnerabile</title>
</head>
<body>
<form action="saluto.php" method="GET">
<label for="name">>Inserisci il tuo nome:</label>
<input type="text" id="name" name="name">
<button type="submit">Invia</button>
</form>
</body>
</html>
Codice PHP Vulnerabile (saluto.php)
<?php
// Raccoglie il nome dall'input GET
$name = $_GET['name'];
// Visualizza il nome direttamente senza sanificazione
echo "Ciao, $name!";
?>
Come Funziona l’Attacco
L’utente può inserire nel campo di testo un payload malevolo come il seguente:
<script>alert(’XSS Vulnerability!’);</script>
Quando il form viene inviato, la pagina `saluto.php` visualizzerà questo codice JavaScript come parte dell'output:
Ciao, <script>alert(’XSS Vulnerability!’);</script>
Questo farà sì che il codice JavaScript venga eseguito nel browser dell’utente, mostrando un popup di avviso con il messaggio "XSS Vulnerability!". In uno scenario reale, l'attaccante potrebbe inserire codice più sofisticato per rubare i cookie di sessione o reindirizzare l’utente a un sito malevolo.
Come Proteggersi
Codice Sicuro in PHPPer prevenire questo tipo di attacco, è possibile sanificare l'output utilizzando la funzione `htmlspecialchars()` in PHP, come segue:
<?php
$name = htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');
echo "Ciao, $name!";
?<
In questo modo, qualsiasi `<script>` o altro codice HTML inserito nell'input viene visualizzato come testo e non viene eseguito dal browser.