Programmazione Web Laboratorio 4: PHP e MySQL Lavagna elettronica (I) Un’unità aziendale di decision making opera per le decisioni di tipo consueto e ripetitivo tramite la procedura seguente: • un qualsiasi membro del gruppo formula una linea di azione • un secondo membro ne prende visione e, se la approva in pieno, formula una proposta identica, altrimenti propone una variante • e così via a seguire per gli altri membri … • non appena una proposta identica viene formulata dalla metà più uno dei componenti, la decisione viene presa e segnalata sulla lavagna a tutti i membri; una mail con la decisione presa deve essere indirizzata all’amministratore del sito (si scelga, a titolo esemplificativo, il proprio indirizzo email), indicando come mittente [email protected] Programmazione Web - Esercizi PHP 2 Lavagna elettronica (II) La soluzione proposta è quella di una lavagna elettronica Sala riunioni ore 20 Casa Rossi, ore 15 Sala riunioni ore 19 … Programmazione Web - Esercizi PHP 3 Lavagna elettronica (III) Ciascun membro può leggere la lavagna tramite il Web, verificare se è già stata presa una decisione (nel qual caso eventuali proposte vengono ignorate) e inviare la propria proposta, che come tutte le altre verrà visualizzata in forma anonima Lavagna.html Sezione dinamica, aggiornata ad ogni invio di proposta Sezione statica, per l’invio di ogni proposta. Programmazione Web - Esercizi PHP 4 …e se si raggiunge l’accordo Lavagna.html Programmazione Web - Esercizi PHP 5 Lavagna elettronica (IV) I partecipanti sono identificati tramite e-mail e preliminarmente inseriti in un database Programmazione Web - Esercizi PHP 6 La pagina Lavagna.html Programmazione Web - Esercizi PHP 7 Lo script lavagna.php Lo script formRicevi.php si basa sulla classe Lavagna.php composta da quattro metodi statici, ciascuno dei quali effettua una connessione, esegue un’opportuna query e chiude la connessione Programmazione Web - Esercizi PHP 8 Iniezione di codice SQL (I) L’iniezione di codice SQL è una tecnica di attacco che sfrutta i campi di input per inserire codice SQL dannoso, ottenendo informazioni private o alterando il database Per esempio: ‘ OR ‘’=‘ Posso accedere senza conoscere la password dell’utente ‘Devis’ Programmazione Web - Esercizi PHP 9 Iniezione di codice SQL (II) L’iniezione di codice SQL è una tecnica di attacco che sfrutta i campi di input per inserire codice SQL dannoso, ottenendo informazioni private o alterando il database Per esempio: Altri valori catastrofici per il campo ‘username’ Programmazione Web - Esercizi PHP 10 Evitare iniezione di codice SQL Esistono diverse tecniche per prevenire l’iniezione di codice SQL, tra le quali: • tecniche che prevedono di effettuare modifiche nel file php.ini • • tecniche che prevedono il controllo degli input dell’utente eliminandone o manipolandone caratteri speciali come i singoli apici, applicabili a qualsiasi input tecniche che prevedono di irrobustire il codice tramite l’uso di casting ed espressioni regolari, applicabili a tipi particolari di input Programmazione Web - Esercizi PHP 11 Modifica del file php.ini Una prima soluzione è quella di modificare direttamente il file di configurazione php.ini, attivando le magic quotes Questa opzione inserirà il carattere di escape davanti a tutti gli apici contenuti in COOKIE, POST e GET Questa soluzione potrebbe tuttavia non essere ottimale: • potrebbe causare incompatibilità con molte altre applicazioni Web • non viene attivata nessuna protezione su input che non provengono da COOKIE, GET o POST Programmazione Web - Esercizi PHP 12 Gestione dell’input dell’utente Un altro modo per prevenire l’iniezione di codice SQL è quello di utilizzare funzioni per la manipolazione delle stringhe: • la funzione addslashes() che esegue il quoting di una stringa mediante slash • la funzione htmlentities() che converte i caratteri speciali in entità HTML • la funzione mysql_escape_string() che aggiunge sequenze di escape in una stringa per l’uso in mysql_query() Programmazione Web - Esercizi PHP 13 Controllo del tipo di input Infine, vengono utilizzate tecniche per controlli specifici sul tipo di input • se un input deve essere un numero intero, viene utilizzato is_numeric per verificarlo e, in caso positivo, viene convertito con intval() o con funzioni analoghe • se un input è una stringa, vengono usate le espressioni regolari per escluderne caratteri speciali Programmazione Web - Esercizi PHP 14 Suggerimenti • Per inviare una mail in PHP, utilizzare la funzione mail() dopo aver opportunamente settato il file php.ini come specificato di seguito Il materiale necessario allo svolgimento dell’esercizio è reperibile al seguente indirizzo http://www.ing.unibs.it/~deantone/MaterialePW/Lucidi/20142015/Laboratori/Lab4 Programmazione Web - Esercizi PHP 15