Controllo input utente [server-side]
- 27 aprile 2005 - 23:14
- Web development
Scopo di quest’articolo è di esaminare le tecniche messe a disposizione da PHP per controllare i dati che un utente fornisce in input a particolari applicazioni web, al fine di migliorarne la sua sicurezza e garantirne un corretto funzionamento.
Partendo dal presupposto che non possiamo essere certi che uno script da noi creato venga richiamato o dal form ad esso associato o, nel caso di variabili di tipo GET passate tramite uri, dalluri correttamente costruito, è fondamentale controllare sempre i dati che si ricevono, in modo da prevenire sia errati inserimenti sia inserimenti creati appositamente per eseguire delle operazioni non consentite.
Ogni dato ricevuto in input, da qualsiasi fonte, va sempre controllato e ricondotto alla logica della applicazione per quanto possibile; in alternativa si può segnalare lerrore allutente tramite dei messaggi creati ad hoc.
Va ricordato che lutente da una parte potrebbe necessitare di capire laddove ha sbagliato nellutilizzare la nostra applicazione e dallaltra potrebbe invece essere intenzionato a scoprire informazioni sensibili.
Tutti i controlli che vedremo sono applicati server-side, tramite php.
Esistono anche dei controlli client-side, implementati ad esempio attraverso javascript; questi controlli possono aiutare un utente a non commettere errori, migliorando lusabilità dellapplicazione e riducendo il carico di lavoro del server.
Dal punto di vista della sicurezza però non sono assolutamente adatti in quanto possono essere facilmente bypassati da utenti malintenzionati; inoltre spesso controlli più accurati possono essere svolti solo lato server, richiedendo informazioni non disponibili lato client.
es. Controllo che la tipologia di operazione ricevuta sia presente nel database, eseguendo una query con la clausola where uguale al valore di input (opportunamente filtrato
).
Principali filtri da applicare:
- numero dei dati di input
es. count($_GET)==3
- presenza dei dati che ci aspettiamo. In primis che siano definiti e quindi presenti ed in secondo luogo che non siano, tranne se lo consentiamo, vuoti, magari definendone anche un valore alternativo di default.
1. if ( isset($_POST[data]) ) {procedura} else {messaggio, esci}
2. if ( trim($_POST[causale])=="" ) $causale="Nessuna causale"
- controllo del tipo per ogni dato. Si può controllare il tipo e agire di conseguenza:
es. is_int(), is_numeric(), is_string() etc.
Oppure effettuare il casting in modo da forzare una variabile ad essere considerata di un certo tipo.
es. (int) ($_POST[peso]) oppure attraverso settype.
Nota: tutte le variabili provenienti da form sono considerate stringhe. - controllo della forma per ogni dato che ne prevede una fissata. Utilizzare eregi() o preg_match().
es. per le date, controllare che siano nella forma gg-mm-aaaa, anche tramite checkdate().
- Range di valori accettabili.
es. controllare che $_POST[peso] sia maggiore di 0 e minore di X.
Pagine: 1 2
