-->

Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

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 PHP
Per 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.