Molto spesso si pensa che l’utilizzo di Flash nelle applicazioni Web renda piu’ sicuro il nostro sito: “Tutto gira in una sola pagina quindi non si conoscono gli script utilizzati” e tante altre belle parole, ahime’, niente di piu’ falso.
Esaminiamo un esempio di insicurezza nell’interazione di Flash e PHP.Supponiamo di avere un bel sito in Flash che permetta il caricamento di un’immagine. Avremo un bel pulsante in Flash che mi aprira’ la finestra di ricerca immagini; una volta scelta l’immagine essa verra’ mostrata a video e manipolata tramite flash per poi essere magari inviata agli amici facendovi sembrare in una bella spiaggia di Miami in buona compagnia.
Tutto figo sino a qui ma cosa succede veramente sul server? Sul server il caricamento dell’immagine sara’ demandato a PHP che con una semplice funzione carichera’ l’immagine sul server che verra’ poi usata da Flash per la manipolazione.
Visto che stiamo usando Flash il programmatore si sentira’ sicuro ad utilizzare un codice PHP del tipo:
$nomeFoto = $_POST[‘nomeMio’];
move_uploaded_file($_FILES[‘Fotografia’][‘tmp_name’], “immagini/”.$nomeFoto);
E’ gia’, tanto ha impostato la finestra di ricerca solo sulle immagini, il nome della foto gli viene passato da Flash et voila’, nessuno scoprira’ mai che questo script si chiama “caricaFotoFlash.php“, figurati mai se qualcuno potrebbe arrivare a capirlo e poi non saprebbe che farsene visto che e’ Flash che gli passa le variabili in POST.
Ahi, ahi, caro sviluppatore, magari fosse cosi’ difficile come credi…Bastera’ utilizzare un semplice sniffer HTTP (Es.: Fiddler) durante il caricamento della foto in Flash per capire il nome del file, il sistema di passaggio delle variabili ed il nome delle variabili utilizzato.
A questo punto niente di piu’ semplice che creare un semplice form in locale:
<form name=”modulo” enctype=”multipart/form-data” action=”<URLPHP>” method=”post”>
Nome: <input type=”text” name=”nomeMio” /><br />
File: <input type=”file” name=”Fotografia”><br />
<input type=”submit” value=”Invia>>” />
</form>
Dove <URLPHP> e’ l’url dello script in PHP che esegue il caricamento della foto e potremo tranquillamente trovare nella cartella immagini del server qualunque genere di cose; dal semplice script phpinfo ai piu’ articolati script che eseguono dei comandi inviati in POST per lanciare degli script in PERL e inviano una mail (sempre passata in POST!) con il resoconto dell’attivita’, a tutta una serie di comandi quali Passthru (se non disabilitato) etc. etc. con gravi ripercussioni d’immagine e non solo.
Occorre quindi non limitarsi solo all’uso lineare di un sistema ma proteggere appropriatamente tutto cio’ che potrebbe essere usato in maniera impropria come un semplice script di caricamento immagini come quello che avra’ fatto divertire un sacco di gente ma impazzire l’amministratore di sistema.