-+  Associazione
-+  Documenti
-+  Eventi
-+  Community
-+  Blog
-+  Link

Ottobre 2013

Dom Lun Mar Mer Gio Ven Sab
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

Cerca






 

« OSCON in Europa? | Home | mod_perl vs PHP »

Nascondiamo gli hidden
07.09.04

Ultimamente stavo riflettendo su uno dei comuni problemi di sicurezza sulla gestione di informazioni nascoste nei form html. Come ben saprete i campi "hidden" danno la possibilità di inserire all'interno di un form html dei campi nascosti non visibili dall'utente, ma inviati al server quando si invia il form.

Il problema che nasce da questa tecnica, è la possibilità da parte di un utente smaliziato di salvare la pagina sul suo sistema locale, modificare questi campi, e reinviare la pagina.

Ecco l'idea!

Ovviamente nel mio caso, che riguarda lo sviluppo del mio FrameWork per IsoGest (www.isogest.org) dove ho la gestione completa del modulo che genera i form, la cosa e di facile implementazione. E' infatti sull'ambiente e i metodi del FrameWork di Isogest che si basa l'esempio sotto riportato. Ma sono certo comunque che l'idea potrebbe essere applicata in qualsiasi situazione.

Attraverso il framwork di Isogest un form tipico è generato dal seguente codice:


FormHead( name=>'provaform',
cgiaction=>'nuovadata' );
Input ( type=>"hidden",
name=>"action1",
value=>'123');
Input ( type=>"hidden",
name=>"action2?,
value=>'321');
Input ( show=>$lang{insert_new_data},
type=>"date",
class=>"totalarea",
name=>"newdate");
Input ( type=>"submit",
value=>$lang{confirm},
onclick=>'self.close()');
FormFoot ();

come è facilmente intuibile il form generato comprende due campi hidden "action1" e "action2" che non verranno visualizzati dal browser, ma che serviranno ipoteticamente al cgi per qualche azione da svolgere con il campo "newdate" che verrà inserito. Se pero' andiamo a visualizzare il codice html generato troviamo i tag relativi ai due campi hidden, e come detto sopra possiamo modificarli a piacere "disorientando" il cgi.

Se invece, senza modificare il codice sopra, quindi in modo trasparente per lo sviluppatore, modificassimo i metodi FormHead e Input in modo che:

- creino un file temporaneo con un nome univoco magari dato dall'id di sessione, dove scrivere tutte le coppie chiave (nome) valore dei campi hidden o memorizzino tali coppie in uno "spazio" relativo alla sessione aperta.

- passassero alla pagina html solo un tag del tipo <input type="hidden" name="myhiddens" value="fd3fd2jf4dgfdgf4dgfd3gf2s2sd2"> (dove "fd3fd2jf4dgfdgf4dgfd3gf2s2sd2" equivale al nome del file temporaneo generato). O non passare alcunchè basandosi esclusivamente sull'ID di sessione aperta.

In questo modo basterebbe modificare il mio metodo ReadParse (che si occupa di prelevare le informazioni dai campi del form) per far in modo che:

- controlli l'esistenza del file temporaneo "fd3fd2jf4dgfdgf4dgfd3gf2s2sd2" o l'esistenza nello "spazio" della sessione di dati inerenti il post o in alternativa avvisi di un possibile tentativo di hacking.

- faccia il parsing del contenuto del file temporaneo o dello spazio della sessione, mettendo a disposizione dello svilupparore (in modo trasparente) il contenuto dei campi hidden.

Tale soluzione apporta al sistema anche un ulteriore miglioria oltre a quella del passaggio dei campi hidden. Infatti abbiamo detto che il metodo FormHead, comunque genera un file temporaneo che è controllato poi da ReadParse al recupero dei dati del form. Questo permette di fare il Parsing solo di form veramente generati dallo script, e non di form magari creati a mestiere dall'utente smaliziato.

Devo ancora implementare l'idea sul mio FrameWork, con l'occasione attendo qualche feedback a conferma condivisione e miglioramento di quanto scritto.

[LucaS]

Inviato da LucaS il 07.09.04 12:53
Ti è piaciuto questo articolo? Iscriviti al feed!

D:
Sull'autore...
D:
La ML di Perl.it
Iscriviti! mongers@lists.perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
D:
Annunci Google